You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨不同目录配对同名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:15:18