使用Python3.6解压缩gz压缩字符串

时间:2017-05-11 00:25:25

标签: python-3.x gzip zlib compression

我想使用python3.6解压缩以下gz压缩字符串:

H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA==

解压缩的字符串是" Hello World "

我能够使用在线工具解压缩它 - http://www.txtwizard.net/compression但我无法在python中找到合适的方法。

我尝试了zlib和gzip,但它们需要字节而不是 str 。我也尝试使用 io.Bytes()进行转换,但没有用。我的代码是:

import gzip
import io 

class SearchEvents:

def decompressPayload():
    payload = "H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA=="
    payload_bytes = io.BytesIO(payload)
    print(gzip.decompress(payload_bytes))

SearchEvents.decompressPayload()

我期待" Hello World "作为输出。但我收到以下错误:

Traceback (most recent call last):
File "SearchEvents.py", line 13, in <module>
SearchEvents.decompressPayload()
File "SearchEvents.py", line 10, in decompressPayload
payload_bytes = io.BytesIO(payload)
TypeError: a bytes-like object is required, not 'str'

有没有办法达到我想要的目的?

2 个答案:

答案 0 :(得分:5)

  

我想使用python3.6解压缩以下gz压缩字符串:

...==

这不是gzip压缩的字符串。至少,直到你首先对它进行Base64解码。

>>> gzip.decompress(base64.b64decode('H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA=='))
b'Hello World'

答案 1 :(得分:0)

对于需要bytes的内容,请将其bytes。添加b前缀以生成bytes字面值,例如:

gzip.decompress(b"H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA==")

这不起作用,因为它不是有效的压缩数据。它看起来像是base64编码的,所以通过将它与binascii组合,你得到:

import binascii
import gzip
gzip.decompress(binascii.a2b_base64(b"H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA=="))

产生b'Hello World'