【问题标题】:Python gzip: OverflowError size does not fit in an intPython gzip:OverflowError 大小不适合 int
【发布时间】:2015-05-21 14:07:59
【问题描述】:

我正在尝试序列化一个大型 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 更快(至少在我的情况)

【问题讨论】:

    标签: python numpy serialization gzip pickle


    【解决方案1】:

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

    https://bugs.python.org/issue23306

    从检查错误报告来看,似乎没有待解决的解决方案。您最好的选择是迁移到显然没有出现此错误的 python 3。

    【讨论】:

    • 看起来问题已经解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多