【发布时间】: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 中引入)包括“添加对非常大的对象的支持”。
-
您为什么要这样做?它肯定比重新读取文件更慢且更耗费资源。
-
你真的有必要一次将整个英文维基百科读入内存吗?弄清楚你想用它做什么然后想出一个压力更小、可能更快的解决方案可能是个好主意,例如将单篇文章放入您喜欢的数据库中。