gzip引发了OverflowError:Size不适合unsigned int

时间:2015-11-06 08:25:50

标签: python gzip zlib

环境:Windows,Python 3.4.1,64位版本。

我尝试用pickle和gzip保存数据,就像这样:

with gzip.open(filename, 'rb') as f:
    pickle.dump(data,f)

可以在没有gzip的情况下成功转储数据,但是使用gzip,异常引发为:

File "C:\Python34\lib\gzip.py", line 344, in write
  self.fileobj.write( self.compress.compress(data) )
OverflowError: Size does not fit in an unsigned int

我追溯了代码,发现gzip实际上建立在zlib之上。在谷歌搜索这个问题之后,我遇到了这个页面http://bugs.python.org/file32715/zlib_64bit-4.patch。似乎强加了unsigned int类型的长度限制。

所以,我的问题是,有没有办法弥补这个错误或传递它?

1 个答案:

答案 0 :(得分:1)

您可以尝试将gzip文件包装在编写器中,该编写器将数据拆分为给定最大大小的块。这是一幅草图:

class ChunkedWriter(object):
    def __init__(self, file, chunksize=65536):
        self.file = file
        self.chunksize = chunksize

    def write(self, data):
        mdata = memoryview(data)
        for i in range(0, len(mdata), self.chunksize):
            self.file.write(bytes(mdata[i:i+self.chunksize]))

我不确定这是否会真正解决您的问题,因为我无法在自己的计算机上重现它。