【发布时间】:2019-10-15 20:56:03
【问题描述】:
我试图在我的文件上写入许多 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 可以从其标头中得知要读取和解压缩的字节数。由于该文件包含两个单独压缩的字节串,第一个标头告诉它读取 23 个字节,因此其余部分永远不会被读取。看看如果你解压缩
p[23:],或者如果你在压缩z = zlib.compress(str1+str2)之前连接行会发生什么 -
谢谢@snakecharmerb。
zlib.decompress(p[23:])确实有效并给了我str2的内容,我假设我事先不知道尺寸/偏移量...