_python3中的pickle不';无法保存大量数据
我正在尝试应用_python3中的pickle不';无法保存大量数据,python,pickle,Python,Pickle,我正在尝试应用\u pickle将数据保存到磁盘上。但是在调用pickle.dump时,我遇到了一个错误 OverflowError: cannot serialize a bytes object larger than 4 GiB 这是一个难以使用的限制吗?(cPickle用于python2)是的,这是一个硬编码限制;发件人: else if(size在Python3.4中不再存在了,Python3.4包含PEP 3154和Pickle 4.0 但是您需要说您想要使用协议的第4版: 对
\u pickle
将数据保存到磁盘上。但是在调用pickle.dump时,我遇到了一个错误
OverflowError: cannot serialize a bytes object larger than 4 GiB
这是一个难以使用的限制吗?(
cPickle
用于python2)是的,这是一个硬编码限制;发件人:
else if(size在Python3.4中不再存在了,Python3.4包含PEP 3154和Pickle 4.0
但是您需要说您想要使用协议的第4版:
对于为什么泡菜不起作用,上面有一个很好的答案。
但它仍然不适用于Python2.7,这是一个问题
如果您仍然使用Python2.7,并且希望支持大型
文件,尤其是NumPy(超过4G的NumPy阵列失败)
您可以使用OC序列化,该序列化已被更新,以在服务器上处理数据
4Gig.有一个Python C扩展模块可从以下位置获得:
请查看文档:
但是,这里有一个简短的总结:有ocdump和ocloads,非常像
pickle的垃圾堆和装载物:
from pyocser import ocdumps, ocloads
ser = ocdumps(pyobject) : Serialize pyobject into string ser
pyobject = ocloads(ser) : Deserialize from string ser into pyobject
<> Po> OC序列化速度更快,1.5-2X,也适用于C++(如果你是混合语言),它适用于所有内置类型,但不适用于类
(部分是因为它是跨语言的,很难构建C++类。
(来自Python).谢谢!是否可以将大文件保存在磁盘上并绕过此限制?@Jake0x32:不使用pickle;这是协议中的一个硬限制。将字节
对象拆分为更小的部分。@MartijnPieters我在尝试从sklearn.svm import SVC
中pickle分类器时遇到了相同的问题。我如何打破此限制对象转换为字节,然后进行pickle?这样打开文件好吗?我的意思是不关闭它。@1a1a11a最好使用“with”语句打开文件,以确保文件被关闭。但是,只要调用pickle.dump返回,对文件对象的引用计数就会降为零,因此它将获得垃圾收集器立即执行CTE,文件将被关闭。@jlund3谢谢你。我已经想知道如果Python有垃圾收集器,“with”到底有什么用。我想这都是关于作用域的。
from pyocser import ocdumps, ocloads
ser = ocdumps(pyobject) : Serialize pyobject into string ser
pyobject = ocloads(ser) : Deserialize from string ser into pyobject