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

如何用Python为制表符分隔的CSV文件添加表头?遇内存错误求助

解决大TSV文件添加表头时的内存错误问题

嘿,我太懂这个坑了——当处理超大TSV/CSV文件时,一次性把所有数据塞进内存绝对会触发内存爆炸!你的问题根源就是data = [line for line in r]这行代码:它把整个文件的所有行都加载到了内存里,文件稍大就直接爆内存。

解决核心思路是流式处理——不把所有数据存进内存,而是边读边写,内存里永远只保留当前处理的那一行。

下面是适配Python 3.6+的修改后代码:

import csv

# 同时打开输入和输出文件,实现边读边写
with open('main_file.csv', 'r', newline='') as infile, open('file.csv', 'w', newline='') as outfile:
    reader = csv.reader(infile, delimiter='\t')
    writer = csv.writer(outfile, delimiter='\t')
    
    # 先写入表头行
    writer.writerow(['a', 'b', 'c', 'd', 'e', 'f'])
    
    # 逐行读取输入文件,读完直接写入输出文件
    for line in reader:
        writer.writerow(line)

为什么这个方法能解决内存问题?

  • 我们不再用列表存储所有行数据,而是每读取一行就立刻写入输出文件,内存里永远只有当前行的内容,内存占用几乎可以忽略。
  • 调整了文件打开模式:Python 3中使用csv模块时,推荐用文本模式(r/w)而非二进制模式(rb/wb),配合newline=''能让csv模块自动处理不同系统的换行符,避免出现多余空行的问题。

额外小提示

如果你的文件大到离谱,这个流式处理已经是最省内存的方案了——csv.reader本身就是惰性迭代的,只会在遍历的时候才读取下一行,不需要额外做其他优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:56