python - python zlib如何解压多个对象
问题描述
我试图在我的文件上写很多 zlib 块,有没有办法从我的文件中获取所有未压缩的内容?从下面的示例代码中,我只能得到我的第一个数据。提前感谢您的任何意见!
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
中公开流中的剩余字节。所以我们可以在一个循环中解压,直到整个连接的流被解压。
*至少,我找不到
推荐阅读
- javascript - 使用 React 和 Redux 处理数据密集型请求的最佳方式是什么?
- html - 为什么我按箭头键时黑匣子不动?
- ios - 尝试在 iOS 的 txt 文件中保存数据时出现 UI 阻塞
- python - 解码 berkeley db 字符串
- python - 无法使用相对导入从当前目录导入 urllib3
- vue.js - Vuex:使用模块化的 Mutations 和 vuex 的 createNamespacedHelpers API
- python - 在 Python 中连接浮点值数组
- c# - 在 dotnet 命令上限制内存
- azure-devops - 使用 REST API 编辑 Release 定义或 Build 定义以传递变量组或 Schedule 是一个好方法
- css - CSS Mask 仅在 X 和 Y 轴上按时重复