Python gzip:OverflowError 大小不适合 int
Python gzip: OverflowError size does not fit in an int
我正在尝试序列化一个大型 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.5GB左右,发送到zlib.crc32的字符串超过2GB。我在 64 位机器上工作,我的 Python 也是 64 位
>>> import sys
>>> sys.maxsize
9223372036854775807
这是 python 的错误还是我做错了什么?有什么好的替代方法可以压缩和序列化 numpy 数组吗?我现在正在查看 numpy.savez, PyTables 和 HDF5,但如果我有足够的内存
知道我为什么会遇到这个问题会很好
更新:我记得在某处读到这可能是由于使用旧版本的 Numpy(我也是)引起的,但我已经完全切换到 numpy。save/savez 相反,它实际上比 cPickle 更快(至少就我而言)
这似乎是 python 2.7
中的错误
https://bugs.python.org/issue23306
从检查错误报告来看,似乎没有悬而未决的解决方案。你最好的选择是移动到 python 3,它显然没有出现这个错误。
我正在尝试序列化一个大型 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.5GB左右,发送到zlib.crc32的字符串超过2GB。我在 64 位机器上工作,我的 Python 也是 64 位
>>> import sys
>>> sys.maxsize
9223372036854775807
这是 python 的错误还是我做错了什么?有什么好的替代方法可以压缩和序列化 numpy 数组吗?我现在正在查看 numpy.savez, PyTables 和 HDF5,但如果我有足够的内存
知道我为什么会遇到这个问题会很好更新:我记得在某处读到这可能是由于使用旧版本的 Numpy(我也是)引起的,但我已经完全切换到 numpy。save/savez 相反,它实际上比 cPickle 更快(至少就我而言)
这似乎是 python 2.7
中的错误https://bugs.python.org/issue23306
从检查错误报告来看,似乎没有悬而未决的解决方案。你最好的选择是移动到 python 3,它显然没有出现这个错误。