【问题标题】:How to write csv in python efficiently? [closed]如何有效地用python编写csv? [关闭]
【发布时间】:2013-03-06 01:26:24
【问题描述】:

我正在计算大型文档中的 tf-idf。我的单词数超过80,000。我正在尝试在 csv 文件中编写稀疏矩阵。我正在使用类似于在此处回答的代码How to add a new column to a CSV file using Python?

输出文件太大,超过 700 MB,仅约 30,000 字。 所以,我的问题是如何有效地编写它? 谢谢。

【问题讨论】:

  • 如果您将稀疏矩阵写入 CSV,那么您对文件大小确实无能为力。压缩能解决您的需求吗?使用主要是逗号的文件,您会获得惊人的压缩率。
  • 另外,您只是想将信息保存到磁盘,还是设置为使用 .csv 格式?如果前者是真的,你有更多的选择。
  • @David 认为你已经涵盖了我要提出的所有观点 - 这个问题肯定需要更明确地定义
  • 您是否评估过为大型文档计算和存储 tf-idf 的现有软件?例如,Sphinx 是开源的,用 C++ 编写,非常节省空间 + 内存 + 速度。 Python有一个API。 sphinxsearch.com
  • @David 我必须使用这个矩阵来做更多的事情。关于我应该如何进行的任何建议?我想将它保存在 csv 中并不是最佳解决方案。

标签: python csv


【解决方案1】:

您可以使用 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 文件可能无法读取。

你也可以用更 Pythonic 的风格来做:

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

保证文件将被关闭。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    CSV 是 CSV,您对此无能为力。如果您真的想要坚持使用 CSV,您可以简单地 gzip 它,或者您可以使用一些更适合您需求的自定义格式。

    例如,您可以使用字典并导出为JSON 格式,或者创建一个专用对象来处理您的数据和pickle

    当我使用 TF-IDF 时,我使用sqlite(通过sqlalchemy)来存储文档信息,TF 数据作为 JSON 格式的字典。从中我创建了 IDF 统计数据,然后使用numpy 完成了 TFIDF 的其余部分

    【讨论】:

    • 感谢您让我了解 pickle 模块。我现在不使用 csv,pickle 文件似乎对我很有效!
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2021-05-07
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多