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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:45:04