Jupyter Notebook(Python)中遍历输入文件实现多CSV批量处理导出
批量遍历处理全量月度CSV文件的实现方案
核心思路
原有单文件处理流程为固定链路:读取单个月度CSV → 执行业务清洗/转换逻辑 → 导出带df_前缀的处理结果CSV。批量处理的核心是把固定流程封装为可复用函数,遍历所有符合命名规则的输入文件依次调用,无需重复编写多遍业务代码。
第一步:封装单文件处理逻辑
将原本硬编码文件名的单文件处理代码改造为接收文件路径为参数的可复用函数,把所有硬编码的文件名替换为动态传入的变量:
import pandas as pd import os def process_single_file(file_path: str) -> None: # 读取当前遍历到的输入文件,替换原硬编码的january_2017.csv路径 # 注:避免使用Python内置关键字`input`作为变量名,这里改用`input_df`存储原始读取数据 input_df = pd.read_csv(file_path) # 此处直接粘贴原有完整业务处理代码,即执行完成后生成目标DataFrame `df` 的全部逻辑 # 动态生成导出文件名,原文件名前添加df_前缀,默认和原文件存放在同一目录 original_file_name = os.path.basename(file_path) output_file_path = f"df_{original_file_name}" df.to_csv(output_file_path)
第二步:遍历匹配所有目标输入文件
针对2017年1月至2019年12月的32个月度文件,有两种常用的遍历实现方式,可根据实际目录环境选择:
方式1:自动扫描目录过滤目标文件
扫描Jupyter Notebook运行目录下的所有文件,自动匹配符合“月份_年份.csv”命名规则、且年份在2017-2019范围内的文件,自动跳过不符合命名要求的杂项文件,避免误处理:
# 指定文件所在目录,若文件与Notebook同目录,此处填空字符串即可 target_dir = '' for file_name in os.listdir(target_dir): # 先筛选CSV后缀的文件 if not file_name.endswith('.csv'): continue # 拆分文件名提取年份部分,匹配文件名格式(如january_2017.csv) try: file_year = int(file_name.split('_')[1].split('.')[0]) except IndexError: # 遇到不符合命名规则的文件直接跳过,不触发处理逻辑 continue # 筛选出2017-2019年范围的目标文件 if 2017 <= file_year <= 2019: full_file_path = os.path.join(target_dir, file_name) process_single_file(full_file_path)
方式2:手动生成全量目标文件列表
如果目录下存在其他无关CSV文件,可直接按照命名规则手动生成全量目标文件路径,灵活性更高,可自动覆盖所有月份组合:
# 配置匹配规则对应的月份英文名、年份范围 month_name_list = [ 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december' ] year_list = [2017, 2018, 2019] # 遍历生成所有月度文件路径并依次处理 for year in year_list: for month in month_name_list: current_file_name = f"{month}_{year}.csv" # 提前判断文件是否存在,避免路径报错中断流程 if os.path.exists(current_file_name): process_single_file(current_file_name)
注意事项
- 原有业务处理逻辑中若存在硬编码的输入、输出路径,需全部替换为基于当前遍历文件的动态值,避免所有文件的处理结果被同一个固定路径覆盖
- 批量运行前可先在循环中添加打印语句,输出当前正在处理的文件名,确认遍历顺序和匹配范围是否符合预期
- 若存在部分文件格式损坏、列名不统一的情况,可在处理函数中增加异常捕获逻辑,避免单个文件报错导致整个批量流程终止
内容的提问来源于stack exchange,提问作者Alejandro Rodiño Climent
相关产品推荐
相关产品推荐

