如何用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
相关产品推荐
相关产品推荐

