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() メソッド (および、close や seek など、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 に答える