【问题标题】:Pickling a very large text file, 12Gb腌制一个非常大的文本文件,12Gb
【发布时间】:2017-05-03 20:21:23
【问题描述】:

我正在尝试使用以下代码腌制一个大文本文件:

import pickle

file1=open('/home/mustafa/data/wiki.en.text','r')
obj=[file1.read()]
pickle.dump(obj,open('data.pkl','w'),2)

我收到以下错误:

struct.error: 'i' format requires -2147483648 <= number <= 2147483647

我认为这可能是一个多处理问题。

【问题讨论】:

  • (1) 这显然与整数限制有关(但我不知道确切的来源)(2) 我看不出有什么好的理由这样做 (3) 我认为你应该打开二进制模式下的目标文件(旧 python 2 文档:如果模式 >= 1 则使用二进制)。
  • 对于 12GB 的数据,pickle 是适合这项工作的工具吗?还是你必须使用它?
  • 您使用的是什么版本的 pickle 协议?请注意description of protocol 4(在 3.4 中引入)包括“添加对非常大的对象的支持”。
  • 您为什么要这样做?它肯定比重新读取文件更慢且更耗费资源。
  • 你真的有必要一次将整个英​​文维基百科读入内存吗?弄清楚你想用它做什么然后想出一个压力更小、可能更快的解决方案可能是个好主意,例如将单篇文章放入您喜欢的数据库中。

标签: python pickle


【解决方案1】:

对于这种序列化pickle不是一个好的选择。即使对于 cPickle,大于 4Gb 的信息也会有很大的问题。您是否考虑过使用 SQLite 或 HDF5 等其他替代方案?

【讨论】:

  • 现在肯定考虑使用 SQlite 或使用 hickle 的 HDF5
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多