python3安装包是说解压数据出错怎么办_python-zlib.error:解压缩时出错-3:不正确的头文件ch...

您有此错误:

zlib.error: Error -3 while decompressing: incorrect header check

这很可能是因为您尝试检查不存在的标头,例如 您的数据遵循zlib(gzip压缩格式)而不是gzip(zlib压缩格式)或RFC 1952(gzip压缩格式)。

选择windowBits

但是zlib可以解压缩所有这些格式:

以(解压缩)zlib格式,使用gzip

to (de-)compress zlib format, use gzip

to (de-)compress zlib format, use gzip

请参阅[http://www.zlib.net/manual.html#Advanced]中的文档(第zlib节)

例子

测试数据:

>>> deflate_compress = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS)

>>> zlib_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS)

>>> gzip_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16)

>>>

>>> text = '''test'''

>>> deflate_data = deflate_compress.compress(text) + deflate_compress.flush()

>>> zlib_data = zlib_compress.compress(text) + zlib_compress.flush()

>>> gzip_data = gzip_compress.compress(text) + gzip_compress.flush()

>>>

zlib的明显测试:

>>> zlib.decompress(zlib_data)

'test'

测试zlib:

>>> zlib.decompress(deflate_data)

Traceback (most recent call last):

File "", line 1, in

zlib.error: Error -3 while decompressing data: incorrect header check

>>> zlib.decompress(deflate_data, -zlib.MAX_WBITS)

'test'

test for zlib:

>>> zlib.decompress(gzip_data)

Traceback (most recent call last):

File "", line 1, in

zlib.error: Error -3 while decompressing data: incorrect header check

>>> zlib.decompress(gzip_data, zlib.MAX_WBITS|16)

'test'

该数据还与zlib模块兼容:

>>> import gzip

>>> import StringIO

>>> fio = StringIO.StringIO(gzip_data) # io.BytesIO for Python 3

>>> f = gzip.GzipFile(fileobj=fio)

>>> f.read()

'test'

>>> f.close()

自动标头检测(zlib或gzip)

将zlib添加到gzip将触发报头检测

>>> zlib.decompress(gzip_data, zlib.MAX_WBITS|32)

'test'

>>> zlib.decompress(zlib_data, zlib.MAX_WBITS|32)

'test'

使用zlib代替

或者您可以忽略zlib并直接使用gzip模块; 但请记住,在后台使用gzip使用zlib。

fh = gzip.open('abc.gz', 'rb')

cdata = fh.read()

fh.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值