Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
_python3中的pickle不';无法保存大量数据_Python_Pickle - Fatal编程技术网

_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