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

如何在多目录中匹配同名文件并实现合并操作?

同名CSV文件匹配与合并方案

问题分析

你现有代码存在两处关键问题:

  • 路径列表path重复写入files_dir_1,未正确引入files_dir_2
  • 仅提取并打印文件名,未实现同名文件匹配和内容合并的核心逻辑

解决思路

  1. 分别获取两个目录下的所有CSV文件名
  2. 通过集合交集快速筛选出两个目录的共同文件名(即同名文件)
  3. 对每个同名文件,读取两个目录下的对应文件内容,合并后保存

完整实现代码

依赖pandas的高效合并方案(适合结构化数据)

import os
import pandas as pd

# 替换为你的实际目录路径
files_dir_1 = "dir1"
files_dir_2 = "dir2"

# 获取两个目录下的CSV文件集合
dir1_csv = {f for f in os.listdir(files_dir_1) if f.endswith('.csv')}
dir2_csv = {f for f in os.listdir(files_dir_2) if f.endswith('.csv')}

# 找出同名文件
common_files = dir1_csv & dir2_csv

# 遍历合并每个同名文件
for filename in common_files:
    # 拼接文件完整路径
    path1 = os.path.join(files_dir_1, filename)
    path2 = os.path.join(files_dir_2, filename)
    
    # 读取CSV数据
    df1 = pd.read_csv(path1)
    df2 = pd.read_csv(path2)
    
    # 纵向合并数据(ignore_index重置索引,避免重复)
    merged_df = pd.concat([df1, df2], ignore_index=True)
    
    # 保存合并后的文件
    merged_path = f"merged_{filename}"
    merged_df.to_csv(merged_path, index=False)
    print(f"{filename} 合并完成,保存为 {merged_path}")

原生文件IO合并方案(无第三方依赖)

如果不需要pandas,可使用原生文件操作实现:

import os

# 替换为你的实际目录路径
files_dir_1 = "dir1"
files_dir_2 = "dir2"

dir1_csv = {f for f in os.listdir(files_dir_1) if f.endswith('.csv')}
dir2_csv = {f for f in os.listdir(files_dir_2) if f.endswith('.csv')}
common_files = dir1_csv & dir2_csv

for filename in common_files:
    path1 = os.path.join(files_dir_1, filename)
    path2 = os.path.join(files_dir_2, filename)
    merged_path = f"merged_{filename}"
    
    with open(merged_path, 'w', encoding='utf-8') as outfile:
        # 写入第一个文件的完整内容(包含表头)
        with open(path1, 'r', encoding='utf-8') as infile:
            outfile.write(infile.read())
        # 写入第二个文件内容,跳过表头
        with open(path2, 'r', encoding='utf-8') as infile:
            next(infile)  # 跳过第一行表头
            outfile.write(infile.read())
    print(f"{filename} 合并完成,保存为 {merged_path}")

关键注意事项

  • 如果CSV文件使用非UTF-8编码(如GBK),需在读取时指定encoding参数,例如pd.read_csv(path1, encoding='gbk')或open(path1, 'r', encoding='gbk')
  • 若需要横向合并(按列拼接),可将pd.concat的axis参数设为1,即pd.concat([df1, df2], axis=1)

内容的提问来源于stack exchange,提问作者AKS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:45:55