如何在多目录中匹配同名文件并实现合并操作?
同名CSV文件匹配与合并方案
问题分析
你现有代码存在两处关键问题:
- 路径列表
path重复写入files_dir_1,未正确引入files_dir_2 - 仅提取并打印文件名,未实现同名文件匹配和内容合并的核心逻辑
解决思路
- 分别获取两个目录下的所有CSV文件名
- 通过集合交集快速筛选出两个目录的共同文件名(即同名文件)
- 对每个同名文件,读取两个目录下的对应文件内容,合并后保存
完整实现代码
依赖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
相关产品推荐
相关产品推荐

