Python逐块解压gzip
Python逐块解压gzip
我在一个内存和磁盘受限的环境中,需要解压以字符串形式分块发送给我的gzip文件(通过xmlrpc二进制传输)。然而,使用zlib.decompress()或zlib.decompressobj()/decompress()都无法处理gzip头部。我已尝试偏移超过gzip头部(在这里有文档),但仍然无法避免出错。gzip库本身似乎只支持从文件解压缩。
以下代码片段简要说明了我想要做的事情(实际情况下,缓冲区将从xmlrpc中填充,而不是从本地文件读取):
#! /usr/bin/env python import zlib CHUNKSIZE=1000 d = zlib.decompressobj() f=open('23046-8.txt.gz','rb') buffer=f.read(CHUNKSIZE) while buffer: outstr = d.decompress(buffer) print(outstr) buffer=f.read(CHUNKSIZE) outstr = d.flush() print(outstr) f.close()
不幸的是,正如我所说的,这导致出错:
Traceback (most recent call last): File "./test.py", line 13, inoutstr = d.decompress(buffer) zlib.error: Error -3 while decompressing: incorrect header check
理论上,我可以将来自xmlrpc的数据输入到StringIO中,然后将其用作gzip.GzipFile()的fileobj,但是在实际情况下,我没有足够的内存来保存整个文件内容以及解压后的数据。我确实需要逐块处理它。
备选方案是将xmlrpc数据的压缩方式从gzip更改为纯zlib,但由于会影响其他子系统,我宁愿避免这种情况。
有什么建议吗?