如何对多个文件批量运行脚本 从文件名dataframe读取并处理对应文件
你可以通过遍历df_file的文件名列,逐次读取对应文件内容即可,操作如下:
首先做前置校验:os.listdir会返回当前路径下的所有文件+子文件夹名称,建议先过滤出你要处理的目标格式文件(比如csv、xlsx等),避免后续读取报错。你可以直接复用下方代码,把你已经调试完成的列替换逻辑放到指定位置即可:
import os import pandas as pd # 这里放你已经调试完成的替换指定列的逻辑,入参为单个文件的内容dataframe,返回处理后的df def replace_target_col(df): # 粘贴你已有的处理代码 return df
方式1:直接遍历文件名列(代码更简洁,适合不需要记录处理状态的场景)
# 按实际处理的文件格式修改后缀,比如xlsx就改成'.xlsx' target_suffix = '.csv' # 如果需要合并所有处理后的文件内容,可以用这个列表存结果 processed_dfs = [] for filename in df_file['Filename']: # 拼接文件的完整绝对路径,避免相对路径读取报错 file_path = os.path.join(os.getcwd(), filename) # 校验是文件且后缀符合要求 if os.path.isfile(file_path) and filename.endswith(target_suffix): # 读取文件内容为dataframe,xlsx格式就换成pd.read_excel(file_path) df_content = pd.read_csv(file_path) # 调用你已经写好的处理逻辑 df_processed = replace_target_col(df_content) # 处理后可以选择保存到新文件,避免覆盖原文件 # df_processed.to_csv(f"processed_{filename}", index=False) processed_dfs.append(df_processed) # 如需合并所有处理后的文件内容,直接拼接即可 total_df = pd.concat(processed_dfs, ignore_index=True)
方式2:按行遍历(适合需要记录每个文件处理状态的场景)
如果需要回写处理状态到原文件名表,方便后续排查失败文件,可以用iterrows遍历每行:
# 给原文件名表加处理状态、错误信息字段 df_file['is_processed'] = False df_file['error_msg'] = '' for idx, row in df_file.iterrows(): filename = row['Filename'] file_path = os.path.join(os.getcwd(), filename) try: if os.path.isfile(file_path) and filename.endswith('.csv'): df_content = pd.read_csv(file_path) df_processed = replace_target_col(df_content) df_processed.to_csv(f"processed_{filename}", index=False) # 标记处理成功 df_file.loc[idx, 'is_processed'] = True except Exception as e: # 捕获异常记录错误原因 df_file.loc[idx, 'error_msg'] = str(e) # 最后可以保存处理日志,方便核对 df_file.to_csv("process_log.csv", index=False)
内容的提问来源于stack exchange,提问作者MatmataHi
相关产品推荐
相关产品推荐

