游客发表

python遍历文件夹下所有excel文件

发帖时间:2026-10-17 05:04:26

办公桌上堆着几十个Excel文件,遍历每个都长着相似的文件l文面孔。手动逐个打开检查?夹下件那是上个世纪的活法。Python的遍历`os.walk()`函数能一口气扫完整个目录树,配合`glob`模块或者`pathlib`,文件l文三五行代码就把所有`.xlsx`文件揪出来。夹下件

先看看最直接的遍历方案:

import os from pathlib import Path target_dir = Path("D:/report") excel_files = list(target_dir.rglob("*.xlsx")) print(f"找到 { len(excel_files)} 个Excel文件") 

这段代码用`rglob`递归搜索,子文件夹里藏得再深的文件l文文件也能翻出来。注意,夹下件`*.xlsx`只匹配新版Excel格式,遍历老旧的文件l文`.xls`文件得单独加个模式。实际业务中经常两种格式混着来,夹下件那就用列表推导式同时抓:

excel_files = list(target_dir.rglob("*.xlsx")) + list(target_dir.rglob("*.xls")) 

拿到文件路径列表只是遍历第一步。真正麻烦的文件l文是文件里藏着什么——有的工作表叫“Sheet1”,有的夹下件叫“数据汇总”,有的干脆用中文名。用`openpyxl`库逐个读取时,得先处理异常。我见过太多同事写的脚本,跑到一半崩溃在某个加密文件上。加个`try-except`,记录失败的文件名,继续处理剩下的,这才是生产环境该有的态度。

import openpyxl from openpyxl import load_workbook for f in excel_files: try: wb = load_workbook(f, data_only=True) for sheet in wb.sheetnames: ws = wb[sheet] # 这里写你的业务逻辑 wb.close() except Exception as e: print(f"跳过 { f.name},原因:{ e}") 

有个细节很多人忽略——`data_only=True`参数。如果不加,读取公式单元格返回的是公式字符串,而不是计算后的值。做数据分析时这能坑死人。还有文件编码问题,CSV文件经常乱码,Excel文件内部用UTF-8,但文件名可能带中文,Windows下路径处理要小心。

实际项目里,我习惯把遍历逻辑封装成生成器,避免一次性加载太多文件路径到内存。假设要处理10万个报表文件,全列表加载会占几百MB内存。生成器逐个产出,配合`pandas`的`read_excel`分块处理,流畅得多。

最后提醒一句:别把所有逻辑堆在一个脚本里。遍历、读取、清洗、分析,拆成函数或类,后面维护的人会感谢你。毕竟三个月后你自己看这堆代码,可能也想不起来当初为什么这么写。

    热门排行

    友情链接