不使用pandas实现CSV按单列分组求和并覆盖原文件的方法
调整后完整实现代码
from csv import reader, writer # 直接做分组累加计算,无需存储所有历史值 sum_index = {} with open('event.csv', 'r', encoding='utf-8') as f: cr = reader(f) for row in cr: key = row[0] num = int(row[1]) sum_index[key] = sum_index.get(key, 0) + num # 覆盖写入原文件 with open('event.csv', 'w', encoding='utf-8', newline='') as csv_file: cw = writer(csv_file) for key, total in sum_index.items(): cw.writerow([key, total])
调整说明
- 补充了Python标准库
csv的导入语句,不需要安装任何第三方依赖,完全符合不使用pandas、少用第三方库的要求 - 把原来存储每个分组所有数值的列表改为直接累加数值,不需要留存历史数据,降低内存占用
- 写入时直接输出每个分组的累加总和,替换原来取列表第一个元素的逻辑,实现分组求和需求
- 移除了多余的
close()调用,with语句会自动管理文件句柄的关闭
关于两次打开文件的说明
两次打开文件的操作是必要且合理的:因为要覆盖原文件,必须先读取完所有原始数据完成求和计算后,才能写入新的结果。如果在同一个文件打开操作中同时读写,会导致还没读取的原始数据被提前覆盖丢失,并不会提升效率反而会导致数据错误。
内容的提问来源于stack exchange,提问作者mat
相关产品推荐
相关产品推荐

