使用Python 3.9按前三列值合并文本行并求和的需求
Python 3.9 实现按前三列合并行并求和后两列
需求说明
给定一个带固定空格分隔的类CSV文本文件,需要合并前三列值完全相同的行,把这些行的heading4和heading5列数值分别求和,最终保留唯一行并输出为新文件。
输入示例
heading1, heading2, heading3, heading4, heading5, 10, 15, 20, 30, 40 10, 14, 20, 20, 39 10, 15, 20, 10, 29 9, 3, 13, 12, 13 10, 14, 20, 2, 3 10, 15, 20, 10, 10
输出示例
heading1, heading2, heading3, heading4, heading5, 10, 15, 20, 50, 79 10, 14, 20, 22, 42 9, 3, 13, 12, 13
实现代码
from collections import defaultdict # 替换成你的输入输出文件路径 input_path = "input.txt" output_path = "output.txt" # 用字典存分组结果:键是前三列的组合,值是[heading4总和, heading5总和] sum_groups = defaultdict(lambda: [0, 0]) with open(input_path, 'r', encoding='utf-8') as infile: # 先读取表头,直接保留原格式 header_line = infile.readline() # 处理每一行数据 for line in infile: stripped_line = line.strip() if not stripped_line: continue # 按逗号拆分字段,同时去掉每个字段的多余空格 fields = [field.strip() for field in stripped_line.split(',')] # 前三列作为分组的唯一标识(元组可哈希,能当字典键) group_key = (fields[0], fields[1], fields[2]) # 累加后两列的数值 sum_groups[group_key][0] += int(fields[3]) sum_groups[group_key][1] += int(fields[4]) # 写入结果到输出文件 with open(output_path, 'w', encoding='utf-8') as outfile: # 先写表头 outfile.write(header_line) # 按原格式拼接每行内容并写入 for key, totals in sum_groups.items(): # 严格匹配原文件的空格排版 result_line = f"{key[0]}, {key[1]}, {key[2]}, {totals[0]}, {totals[1]}\n" outfile.write(result_line)
代码说明
- 用
defaultdict是为了简化分组逻辑,不用每次判断当前前三列组合是否已经存在,直接就能初始化累加值。 - 表头单独读取并原样写入,保证输出的表头和输入完全一致。
- 每行数据拆分后先去掉字段的多余空格,避免空格影响分组判断,后两列转成整数进行累加。
- 写入结果时特意按照原文件的空格格式拼接,确保输出排版和输入一致,不会出现格式混乱。
内容的提问来源于stack exchange,提问作者Devenepali
相关产品推荐
相关产品推荐

