如何使用Python将多个大文本文件的整数逐行求和输出到新文件
问题排查
你的代码存在3个核心错误:
- 未做数值转换:
row.split()返回字符串列表,直接执行+操作是列表拼接而非数值求和,完全没有实现加法逻辑 - 内存占用不符合要求:你把第一个文件的1亿行全存入
sums数组,会占用几百MB甚至更多内存,违背了你不加载全量文件的需求 - 输出逻辑完全错误:你最后直接把遍历到的最后一个文件(也就是file2_1.txt)的内容复制到输出文件,计算得到的
sums数组根本没有写入输出文件,这也是你只看到第二个文件内容的直接原因
低内存单进程实现方案
该方案逐行同步读取所有文件的对应行,内存仅保留当前行的计算数据,完全不加载全量文件内容,适配1亿行大文件场景。如果文件行数不一致,会自动以最短文件的行数作为终止条件,刚好适配你所有文件均为1亿行的场景:
# 生成10个待处理文件的文件名,按需修改range参数即可 filenames = [f'file2_{i}.txt' for i in range(10)] # 批量打开所有输入文件 input_files = [open(file, 'r', encoding='utf-8') for file in filenames] with open('total_file.txt', 'w', encoding='utf-8') as out_file: # 同步迭代所有文件的对应行 for rows in zip(*input_files): # 转整数求和后写入输出文件 line_sum = sum(int(row.strip()) for row in rows) out_file.write(f"{line_sum}\n") # 关闭所有输入文件句柄 for f in input_files: f.close()
并发优化说明
你的场景属于IO密集型任务,大部分耗时集中在磁盘读写,使用多线程可以有效提升处理效率:
- 可以使用
concurrent.futures.ThreadPoolExecutor实现并行处理,注意要按行序写入结果,避免输出内容错乱 - 如果后续要叠加复杂计算逻辑,也可以替换为
ProcessPoolExecutor使用多进程规避GIL限制
内容的提问来源于stack exchange,提问作者Mr.Mongo
相关产品推荐
相关产品推荐

