如何高效地在Python中写入CSV?

0 投票
2 回答
9049 浏览
提问于 2025-04-17 19:25

我正在处理一个大文档,想要计算tf-idf(词频-逆文档频率)。我手头的单词数量超过了80,000个。我想把稀疏矩阵写入一个csv文件。我使用的代码和这里的回答类似:如何用Python给CSV文件添加新列?

但是,输出文件的大小太大了,只有大约30,000个单词就超过了700 MB。 所以,我想知道怎么才能更高效地写入这个文件? 谢谢。

2 个回答

14

你可以很简单地使用gzip模块直接写入一个gzip文件:

import gzip
import csv

f=gzip.open("myfile.csv.gz", "w")
csv_w=csv.writer(f)
for row in to_write :
    csv_w.writerow(row)
f.close()

别忘了关闭文件,否则生成的csv.gz文件可能会无法读取。

你也可以用一种更符合Python风格的方法来做:

with gzip.open("myfile.csv.gz", "w") as f :
    csv_w = csv.writer(f)
    ...

这样可以确保文件会被关闭。

希望这对你有帮助。

2

CSV就是逗号分隔值文件,没什么特别的,你也不能改变它。如果你真的想继续使用CSV格式,可以用gzip来压缩它,或者你可以选择一些更适合你需求的自定义格式。

比如,你可以使用字典,然后导出成JSON格式,或者创建一个专门处理你数据的对象,然后用pickle来保存它。

我在做TF-IDF的时候,使用了sqlite(通过sqlalchemy)来存储文档信息,把TF数据以字典的形式保存为JSON格式。然后我从中创建了IDF统计数据,接着用numpy完成了剩下的TF-IDF计算。

撰写回答