1

我正在尝试使用 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 check failed。我假设这是因为它希望整个 gzip 压缩的内容都存在于 buf 中,而我一次只读取 160 个字节。这个有解决办法吗??

谢谢

4

1 回答 1

4

使用 read() 方法创建您自己的类(以及 GzipFile 从 fileobj 需要的任何其他内容,例如关闭和查找)并将其传递给 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()
于 2009-11-13T02:18:29.423 回答