我想使用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'
有没有办法达到我想要的目的?
答案 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'