【问题标题】:Decompress gz compressed string using Python3.6使用Python3.6解压gz压缩字符串
【发布时间】:2017-10-09 19:38:13
【问题描述】:

我想用python3.6解压下面的gz压缩字符串:

H4sIAAAAAAAA//NIzcnJVwjPL8pJAQBWsRdKCwAAAA==

解压后的字符串是“Hello World

我可以使用在线工具 - http://www.txtwizard.net/compression 对其进行解压缩,但我在 python 中找不到合适的方法。

我尝试了 zlib 和 gzip,但它们需要 bytes 而不是 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'

有什么方法可以实现我想要的吗?

【问题讨论】:

  • 看来需要先解码base64...

标签: python-3.x gzip zlib compression


【解决方案1】:

我想用python3.6解压下面的gz压缩字符串:

...==

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

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

【讨论】:

    【解决方案2】:

    对于需要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'

    【讨论】:

    • 它给了我另一个错误:OSError: Not a gzipped file (b'H4')
    • @user93726:是的,还有更多内容,我正在检查以确定。现在发布的内容应该可以使用。
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多