使用Python gzip模块解压部分文件
我正在尝试使用Python中的gzip模块解压一个gzipped文件。我的前提是,我每次只能获取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检查失败。我猜这是因为它期望buf中有整个gzipped内容,而我每次只读取160个字节。有没有什么解决办法呢?
谢谢
1 个回答
4
创建一个自己的类,并在里面定义一个叫做 read() 的方法(还有 GzipFile 需要的其他方法,比如 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()