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

按文件名条件合并多CSV文件的技术问题求助

按指定顺序合并同标识CSV文件的解决方案

看起来你之前的合并操作因为没做好分组和排序,导致结果不符合预期——既漏了B类文件,还把所有A类混在一起合并了。别担心,用Python的pandas库可以轻松搞定这个需求,下面是具体的实现步骤和代码:

核心思路

  1. 精准分组:根据文件名里的前缀(比如Name1)和类别(A/B)把文件分成独立的组,比如Name1_A组、Name2_B组,确保不同组的文件不会互相干扰。
  2. 按规则排序:每个组内的Stuff文件按数字顺序(Stuff1→Stuff2→Stuff3)排列,Total文件可以根据你的需求放在最前面或者最后面。
  3. 组内合并:对每个分组单独执行合并操作,最后输出对应结果。

具体代码实现

步骤1:导入依赖库

import os
import pandas as pd
import re

步骤2:定义路径和分组规则

把下面的路径替换成你的CSV文件所在的文件夹路径:

csv_folder = "./your_csv_files"  # 替换成你的实际路径

接下来用正则表达式提取文件名里的关键信息,完成分组和排序:

# 正则匹配文件名结构:前缀_类型_类别.csv
filename_pattern = re.compile(r"(\w+)_(Total|Stuff\d+)_(\w+)\.csv")

# 存储Total文件和分组后的Stuff文件
total_files = {}
sorted_stuff_groups = {}

for filename in os.listdir(csv_folder):
    if not filename.endswith(".csv"):
        continue
    match_result = filename_pattern.match(filename)
    if not match_result:
        print(f"跳过不符合命名规则的文件:{filename}")
        continue
    
    prefix = match_result.group(1)  # 提取Name1、Name2这类前缀
    file_type = match_result.group(2)  # 提取Total或StuffN
    category = match_result.group(3)  # 提取A/B类别
    group_key = (prefix, category)  # 用(前缀,类别)作为分组的唯一标识
    
    if file_type == "Total":
        # 记录每个分组对应的Total文件
        total_files[group_key] = filename
    elif file_type.startswith("Stuff"):
        # 提取Stuff后面的数字作为排序依据
        sort_num = int(file_type.split("Stuff")[-1])
        if group_key not in sorted_stuff_groups:
            sorted_stuff_groups[group_key] = []
        sorted_stuff_groups[group_key].append( (sort_num, filename) )

# 对每个Stuff分组按数字排序
for key in sorted_stuff_groups:
    sorted_stuff_groups[key] = [f for (num, f) in sorted(sorted_stuff_groups[key])]

步骤3:按顺序合并文件

这里实现的是把Stuff文件按顺序合并到对应的Total文件中,如果你需要合并成新文件而不是覆盖Total,可以修改输出文件名:

for group_key in sorted_stuff_groups:
    # 检查当前分组是否有对应的Total文件
    if group_key not in total_files:
        print(f"警告:分组{group_key}未找到对应的Total文件,跳过合并")
        continue
    
    total_filename = total_files[group_key]
    stuff_files = sorted_stuff_groups[group_key]
    
    # 读取Total文件作为合并的基础
    total_file_path = os.path.join(csv_folder, total_filename)
    merged_data = pd.read_csv(total_file_path)
    
    # 按顺序读取并合并每个Stuff文件
    for stuff_file in stuff_files:
        stuff_path = os.path.join(csv_folder, stuff_file)
        stuff_data = pd.read_csv(stuff_path)
        # 行合并(追加数据),如果需要列合并可以把axis设为1
        merged_data = pd.concat([merged_data, stuff_data], ignore_index=True)
    
    # 保存合并结果:这里直接覆盖原Total文件,也可以改成新文件名
    output_path = os.path.join(csv_folder, total_filename)
    # 如果你想生成新文件,可以用下面的命名:
    # output_path = os.path.join(csv_folder, f"{group_key[0]}_Merged_{group_key[1]}.csv")
    merged_data.to_csv(output_path, index=False)
    print(f"✅ 已完成合并:{total_filename}")

关键注意事项

  • 列名一致性:确保同组内的所有CSV文件列名一致,否则合并后会出现NaN值。如果列名不一致,可以在读取文件时指定usecols参数只保留共同列。
  • 命名规则统一:所有需要合并的文件必须严格遵循前缀_类型_类别.csv的命名格式,比如Name1_Stuff1_A.csv、Name2_Total_B.csv,否则会被跳过。
  • 路径权限:确保你有读取CSV文件夹和写入文件的权限,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:33:30