我正在尝试使用gzip模块在Python中解压缩gzip压缩文件。前提条件是,我一次获得160个字节的数据,我需要在请求下一个160字节之前将其解压缩。在请求下一个160字节之前,部分解压缩是可以的。我的代码是
import gzip
import time
import StringIO
file = open('input_cp.gz', 'rb')
buf = file.read(160)
sio = StringIO.StringIO(buf)
f = gzip.GzipFile(fileobj=sio)
data = f.read()
print data
我得到的错误是IOError:CRC检查失败。我假设这是因为它期望整个gzip压缩内容存在于buf中,而我一次只读取160个字节。有解决方法吗?
由于
答案 0 :(得分:4)
使用read()方法(以及GzipFile从fileobj需要的其他内容,如close和seek)创建自己的类,并将其传递给GzipFile。类似的东西:
class MyBuffer(object):
def __init__(self, input_file):
self.input_file = input_file
def read(self, size=-1):
if size < 0:
size = 160
return self.input_file.read(min(160, size))
然后使用它:
file = open('input_cp.gz', 'rb')
mybuf = MyBuffer(file)
f = gzip.GzipFile(fileobj=mybuf)
data = f.read()