Python gzip:OverflowError大小不适合int

时间:2015-05-21 14:08:00

标签: python numpy serialization gzip pickle

我正在尝试序列化一个大的python对象,它由一个使用pickle / cPickle和gzip的numpy数组组成。该过程适用于一定大小的数据,之后我收到以下错误:

--> 121     cPickle.dump(dataset_pickle, f)

    ***/gzip.pyc in write(self, data)
    238             print(type(self.crc))
    239             print(self.crc)
--> 240             self.crc = zlib.crc32(data, self.crc) & 0xffffffffL
    241             self.fileobj.write( self.compress.compress(data) )

OverflowError: size does not fit in an int

numpy数组的大小约为1.5 GB,发送到zlib.crc32的字符串超过2 GB。我正在使用64位机器,我的Python也是64位

>>> import sys
>>> sys.maxsize
9223372036854775807

是python的错误还是我做错了什么?压缩和序列化numpy数组有什么好的选择吗?我现在正在查看numpy.savezPyTables和HDF5,但知道为什么我遇到这些问题会很好,因为我有足够的内存

更新:我记得在某个地方读到这可能是因为使用了旧版本的Numpy(我当时),但是我完全切换到numpy.save/savez而不是cPickle(至少在我的情况)

1 个答案:

答案 0 :(得分:1)

这似乎是python 2.7中的一个错误

https://bugs.python.org/issue23306

从检查错误报告来看,它似乎没有待处理的解决方案。你最好的选择是转移到python 3,显然没有出现这个bug。