如何用Python按文件名前缀分组合并同物种对应的CSV文件
可行解决方案
核心逻辑
按文件名前缀(前三个下划线分隔段)对文件做分组,每组内文件按TreeID关联合并后输出。
可直接运行代码
import os import glob import pandas as pd from collections import defaultdict # 配置路径 csv_dir = "." all_csv_files = glob.glob(os.path.join(csv_dir, "*.csv")) # 按物种前缀分组 file_groups = defaultdict(list) for file_path in all_csv_files: file_name = os.path.basename(file_path) group_key = "_".join(file_name.split("_")[:3]) file_groups[group_key].append(file_path) # 逐组合并输出 for group_name, group_files in file_groups.items(): # 读取第一个文件作为基准表 merged_df = pd.read_csv(group_files[0]) # 遍历组内剩余文件合并 for f in group_files[1:]: curr_df = pd.read_csv(f) # 按TreeID合并,适配所有行标识一致的场景 merged_df = merged_df.merge(curr_df, on="TreeID", how="left") # 输出合并结果 merged_df.to_csv(f"{group_name}.csv", index=False, encoding="utf-8") print(f"已完成:{group_name}.csv,合并文件数:{len(group_files)}")
性能优化(可选)
如果你确认所有同组文件的TreeID顺序完全一致,可以将合并部分替换为直接列拼接,速度提升非常明显,适合17000个文件的大批量处理场景:
# 替换上面逐组合并的代码块即可 for group_name, group_files in file_groups.items(): merged_df = pd.read_csv(group_files[0]) for f in group_files[1:]: curr_df = pd.read_csv(f) # 直接取第二列追加,无需关联匹配,速度更快 merged_df[curr_df.columns[1]] = curr_df.iloc[:, 1] merged_df.to_csv(f"{group_name}.csv", index=False, encoding="utf-8") print(f"已完成:{group_name}.csv,合并文件数:{len(group_files)}")
内容的提问来源于stack exchange,提问作者ensifer
相关产品推荐
相关产品推荐

