这就是问题所在。我有sample.gz文件,大小约为60KB。我想解压缩该文件的前2000个字节。我遇到了CRC检查失败的错误,我猜是因为gzip CRC字段出现在文件末尾,并且它需要整个gzip压缩文件进行解压缩。有办法解决这个问题吗?我不在乎CRC检查。即使由于CRC错误而无法解压缩,也可以。有没有办法解决这个问题并解压缩部分.gz文件?
我到目前为止的代码是
import gzip import time import StringIO file = open('sample.gz', 'rb') mybuf = MyBuffer(file) mybuf = StringIO.StringIO(file.read(2000)) f = gzip.GzipFile(fileobj=mybuf) data = f.read() print data
遇到的错误是
File "gunzip.py", line 27, in ? data = f.read() File "/usr/local/lib/python2.4/gzip.py", line 218, in read self._read(readsize) File "/usr/local/lib/python2.4/gzip.py", line 273, in _read self._read_eof() File "/usr/local/lib/python2.4/gzip.py", line 309, in _read_eof raise IOError, "CRC check failed" IOError: CRC check failed
还可以使用zlib模块执行此操作并忽略gzip标头吗?
我似乎您需要查看 Python zlib 库
GZIP格式依赖zlib,但是引入了文件级压缩概念以及CRC检查,这似乎是您目前不想要/不需要的。
例如,请参阅 Dough Hellman的 这些 代码片段
编辑 :Doubh Hellman网站上的代码仅显示如何使用zlib进行压缩或解压缩。如上所述,GZIP是“带信封的zlib”,您需要先对信封进行解码,然后才能获取zlib压缩的数据 本身 。这里是更多信息,实际上并不那么复杂:
很抱歉,既没有提供简单的过程,也没有提供现成的代码段,但是使用上述指示解码文件应该相对较快和简单。