使用python gzip模块解压缩文件的一部分

时间:2009-11-13 02:10:34

标签: python gzip unzip

我正在尝试使用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个字节。有解决方法吗?

由于

1 个答案:

答案 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()