gzip raised OverflowError: Size does not fit in an unsigned int
gzip raised OverflowError: Size does not fit in an unsigned int
环境: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 类型的长度限制。
所以,我的问题是,有什么办法可以弥补或绕过这个错误吗?
您可以尝试将 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]))
我不确定这是否真的能解决您的问题,因为我无法在自己的计算机上重现它。
环境: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 类型的长度限制。
所以,我的问题是,有什么办法可以弥补或绕过这个错误吗?
您可以尝试将 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]))
我不确定这是否真的能解决您的问题,因为我无法在自己的计算机上重现它。