如何跨不同目录配对同名CSV文件批量运行Python脚本
配对不同目录下的同名CSV文件批量执行脚本
目录结构
Directory_1 | |--- FileA.csv |--- FileB.csv ..... Directory_2 | |--- File2_A.csv |--- File2_B.csv .....
当前代码
import os import sys directory1_path = "CSV_Files/FileX_CSV/" directory2_path = "CSV_Files/File2_X_CSV/" for fileX in os.listdir(directory1_path): if fileX.endswith(".csv"): with open(os.path.join(directory1_path , fileX)): os.system(f'python LoadingX.py -i1 {fileX} -i2 {file2_x} -o1 LoadX_concat.csv')
需求说明
需要实现同名文件配对执行,比如:
- 第一次执行:
python LoadingX.py -i1 FileA.csv -i2 File2_A.csv -o1 LoadX_concat.csv - 第二次执行:
python LoadingX.py -i1 FileB.csv -i2 File2_B.csv -o1 LoadX_concat.csv
当前循环仅能遍历单目录文件,无法实现这种配对逻辑。
解决方案
核心思路是根据文件名规则生成配对文件,或预先构建文件映射表,确保两个目录的对应文件能正确匹配:
方案1:按固定文件名规则生成配对文件
假设Directory_2的文件名是File2_ + Directory_1文件名的核心部分(比如FileA.csv对应File2_A.csv),直接通过字符串替换生成对应文件名:
import os directory1_path = "CSV_Files/FileX_CSV/" directory2_path = "CSV_Files/File2_X_CSV/" # 遍历Directory_1下的CSV文件 for fileX in os.listdir(directory1_path): if not fileX.endswith(".csv"): continue # 跳过非CSV文件 # 根据规则生成Directory_2中对应的文件名 # 示例:将"File"替换为"File2_",适配FileA.csv → File2_A.csv的规则 file2_x = fileX.replace("File", "File2_") file2_full_path = os.path.join(directory2_path, file2_x) # 检查配对文件是否存在,避免执行错误 if not os.path.exists(file2_full_path): print(f"警告:{file2_x} 不存在于 {directory2_path},跳过本次执行") continue # 执行脚本,建议传递完整文件路径避免路径问题 cmd = f'python LoadingX.py -i1 "{os.path.join(directory1_path, fileX)}" -i2 "{file2_full_path}" -o1 LoadX_concat.csv' os.system(cmd)
方案2:构建文件映射表适配复杂规则
如果文件名规则不固定,先把Directory_2的文件按核心名称存入字典,再匹配Directory_1的文件:
import os directory1_path = "CSV_Files/FileX_CSV/" directory2_path = "CSV_Files/File2_X_CSV/" # 构建Directory_2的文件映射:核心名称 → 完整文件名 dir2_file_map = {} for file in os.listdir(directory2_path): if file.endswith(".csv"): # 提取核心名称:比如File2_A.csv → A.csv core_name = file.replace("File2_", "") dir2_file_map[core_name] = file # 遍历Directory_1的文件,查找对应配对文件 for fileX in os.listdir(directory1_path): if not fileX.endswith(".csv"): continue if fileX in dir2_file_map: file2_x = dir2_file_map[fileX] file2_full_path = os.path.join(directory2_path, file2_x) cmd = f'python LoadingX.py -i1 "{os.path.join(directory1_path, fileX)}" -i2 "{file2_full_path}" -o1 LoadX_concat.csv' os.system(cmd) else: print(f"警告:{fileX} 在 {directory2_path} 中无对应文件,跳过")
注意事项
- 根据实际文件名格式调整字符串替换/提取逻辑
- 传递文件时优先使用完整路径,避免脚本因工作目录问题找不到文件
- 添加文件存在性检查,避免无效执行导致报错
内容的提问来源于stack exchange,提问作者Zebra125
相关产品推荐
相关产品推荐

