python zlib如何解压多个对象

标签 python zlib

我试图在我的文件上写很多 zlib block ,有没有办法从我的文件中获取所有未压缩的内容?从下面的示例代码中我只能得到我的第一个数据。预先感谢您的任何意见!

Python 3.6.8 |Anaconda, Inc.| (default, Dec 29 2018, 19:04:46) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import zlib
>>> str1 = b'my first string'
>>> str2 = b'my second string'
>>> z1 = zlib.compress(str1)
>>> z2 = zlib.compress(str2)
>>> with open('test.z', 'wb') as fh:
...     fh.write(z1)
...     fh.write(z2)
... 
23
24
>>> p = open('test.z','rb').read()
>>> p
b'x\x9c\xcb\xadTH\xcb,*.Q(.)\xca\xccK\x07\x00.6\x05\xe6x\x9c\xcb\xadT(NM\xce\xcfKQ(.)\xca\xccK\x07\x003\xfb\x06:'
>>> zlib.decompress(p)
b'my first string'
>>> zlib.decompress(p)
b'my first string'

最佳答案

没有办法在单个函数或方法调用中解压缩串联的压缩流*。但是,可以使用 zlib 中的工具获得等效的功能。包。

>>> import zlib
>>> b1 = b'Here is some data'
>>> b2 = b'Here is some more data'
>>> stream = zlib.compress(b1) + zlib.compress(b2)


>>> while stream:
...     dco = zlib.decompressobj()
...     dec = dco.decompress(stream)
...     print(dec)
...     stream = dco.unused_data
... 
b'Here is some data'
b'Here is some more data'

zlib.decompressobj()创建一个解压缩单个压缩流的对象 - 如 zlib.decompress - 并在其 unused_data 中公开流中的剩余字节属性。所以我们可以在一个循环中解压缩,直到整个连接的流都被解压缩。

*至少,我找不到

关于python zlib如何解压多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402524/

相关文章:

python - 如何在 VS Code 中调试 Flask 应用程序

python - C zlib crc32 和 Python zlib crc32 不匹配

java - 附加代码抛出 java.util.zip.ZipException : incorrect data check for given . dat 文件

戈兰 : "compress/flate" module can't decompress valid deflate compressed HTTP body

c++ - 如何使用 zlib 支持构建 boost?

python - 使用 YouTube API 检查 YouTube Music 上是否提供视频

python - 通过 LSTM (Core ML) 处理序列

python - 测试需要 Flask 应用程序或请求上下文的代码

ruby - Zlib 解压引发 header 错误 - Ruby

python - vector/matrix `np.outer` 乘积是否有类似于 "outer"的函数?