如何用Python遍历400个子文件夹批量打开指定Excel并存为df1、df2等
批量遍历子文件夹读取固定Excel的实现方案
前置依赖
首先安装需要的依赖库:pip install pandas openpyxl
推荐方案:用列表统一存储表格对象(优先选这个)
这种方式比手动命名df1、df2灵活太多,后续批量处理、合并、统计都不用额外调整,非常适合处理400个同类文件的场景。
步骤如下:
- 导入依赖库
import pandas as pd from pathlib import Path
- 定义根目录、目标Excel的固定名称,按需替换成你自己的路径和文件名
# 总文件夹的路径,可写绝对路径比如 Path("D:/项目文档/总文件夹") root_dir = Path("你的总文件夹路径") # 每个子文件夹里固定存在的Excel文件名 target_excel_name = "固定的目标Excel名称.xlsx"
- 初始化列表存储所有读取到的df,循环遍历读取
# 存储所有表格的列表,索引0对应原来的df1,索引1对应df2,以此类推 dfs_list = [] # 若你的400个子文件夹都是根目录下的一级目录,用下面的精准遍历逻辑,避免误搜其他位置的同名文件 for sub_dir in root_dir.iterdir(): # 跳过根目录下的文件,只处理子文件夹 if not sub_dir.is_dir(): continue # 拼接当前子文件夹下的目标Excel路径 current_excel_path = sub_dir / target_excel_name # 只处理存在的目标文件 if current_excel_path.exists(): df = pd.read_excel(current_excel_path) dfs_list.append(df) else: print(f"提示:子文件夹 {sub_dir.name} 中未找到目标Excel,已跳过")
运行完后,dfs_list[0]等价于手动命名的df1,dfs_list[1]等价于df2,后续要合并所有表格直接执行pd.concat(dfs_list)即可,要批量处理所有df直接遍历dfs_list就行。
次选方案:强制生成df1、df2...格式的独立命名变量(不推荐)
如果有特殊需求必须要生成独立的df1、df2命名的变量,可以用动态赋值的方式实现,但这种写法属于Python的反模式,无法批量遍历处理变量,后续扩展灵活性很差,仅在特殊需求下使用。
代码逻辑:
# 先清理历史残留的df1、df2...变量,避免混淆 for var_name in list(globals().keys()): if var_name.startswith("df") and var_name[2:].isdigit(): del globals()[var_name] count = 1 for sub_dir in root_dir.iterdir(): if not sub_dir.is_dir(): continue current_excel_path = sub_dir / target_excel_name if current_excel_path.exists(): df = pd.read_excel(current_excel_path) # 动态把当前df赋值给全局变量df{count} globals()[f"df{count}"] = df count += 1
运行完成后,会自动在全局作用域生成df1、df2、df3...直到dfN,N为实际找到的目标Excel数量。
注意事项
- 如果你的目标Excel是旧版
.xls格式,需要额外安装xlrd库,读取时指定引擎:pd.read_excel(current_excel_path, engine="xlrd") - 若目标Excel有多个工作表,需要读取指定工作表时,可在
pd.read_excel()里加sheet_name="工作表名称"参数 - 遍历前可以先手动核对几个子文件夹的目标Excel路径,避免路径写错导致漏读
内容的提问来源于stack exchange,提问作者Ignacio Zamanillo
相关产品推荐
相关产品推荐

