如何用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")
注意事项
- 文件顺序:如果
glob获取的文件顺序不符合需求(比如需要按文件名中的数字排序),可以手动对file_list排序,例如:# 假设文件名是data_1.csv、data_2.csv...,按数字排序 file_list.sort(key=lambda x: int(x.split('_')[-1].split('.')[0])) - 异常处理:如果存在格式错误的行(比如没有逗号、数值格式异常),可以添加
try-except块避免程序崩溃:try: id_str, val = line.split(',', 1) except ValueError: print(f"跳过格式错误的行: {line}") continue - 数值类型:如果需要对数值进行计算,可以将
val转换为int或float,例如val = int(val.strip()),输出时再转成字符串即可。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

