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

如何用Python实现多文件数据按ID合并(替代PHP可变数组写法)

在Python中实现多文件ID对应数值的按序拼接

核心思路

Python中不推荐使用类似PHP的可变变量写法(会严重降低代码可维护性),我们可以用字典来完美实现需求:以ID为键,对应数值的列表为值,遍历所有文件时将每个ID的数值按文件顺序追加到列表中,最后再将每个ID和对应的数值列表拼接成目标格式。

具体实现代码

import glob

# 获取所有目标数据文件(这里假设是csv格式,根据实际路径和后缀修改)
file_list = glob.glob("./data/*.csv")

# 初始化字典:键为ID,值为存储对应数值的列表
id_data = {}

# 遍历每个文件,按顺序收集数据
for file_path in file_list:
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue  # 跳过空行
            
            # 分割ID和数值,split(',' ,1)避免数值中包含逗号的情况
            id_str, val = line.split(',', 1)
            val = val.strip()
            
            # 若ID未在字典中,初始化空列表
            if id_str not in id_data:
                id_data[id_str] = []
            # 将当前文件的数值追加到对应ID的列表
            id_data[id_str].append(val)

# 输出整理后的结果(按ID排序保证输出顺序一致)
for id_str in sorted(id_data.keys()):
    print(f"{id_str},{','.join(id_data[id_str])}")

# 也可以将结果写入到输出文件
with open("merged_result.csv", 'w', encoding='utf-8') as out_file:
    for id_str in sorted(id_data.keys()):
        out_file.write(f"{id_str},{','.join(id_data[id_str])}\n")

注意事项

  1. 文件顺序:如果glob获取的文件顺序不符合需求(比如需要按文件名中的数字排序),可以手动对file_list排序,例如:
    # 假设文件名是data_1.csv、data_2.csv...,按数字排序
    file_list.sort(key=lambda x: int(x.split('_')[-1].split('.')[0]))
    
  2. 异常处理:如果存在格式错误的行(比如没有逗号、数值格式异常),可以添加try-except块避免程序崩溃:
    try:
        id_str, val = line.split(',', 1)
    except ValueError:
        print(f"跳过格式错误的行: {line}")
        continue
    
  3. 数值类型:如果需要对数值进行计算,可以将val转换为int或float,例如val = int(val.strip()),输出时再转成字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:30:48