Распакуйте часть файла с помощью модуля Python GZIP - PullRequest
1 голос
/ 13 ноября 2009

Я пытаюсь распаковать ZIP-файл в 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 не удалась. Я предполагаю, что это потому, что он ожидает, что весь сжатый контент будет присутствовать в буфере, в то время как я читаю только 160 байтов за раз. Есть ли решение этой проблемы?

Спасибо

1 Ответ

4 голосов
/ 13 ноября 2009

Создайте свой собственный класс с помощью метода 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()
...