代码如下:
import zlib
str1 = "1234567890"
data1 = str1.encode()
print(len(data1), data1.decode())
data2 = zlib.compressobj().compress(data1)
data3 = zlib.decompressobj().decompress(data2)
str2 = data3.decode()
print(len(str2), str2)
我这里输出的是:
10 1234567890
0
为什么会这样的呢?
1
lcdtyph 2020-11-05 01:10:11 +08:00 1
(de)compressobj()返回的对象是有状态的,主要用来处理流数据,在输入结束之后要调用 obj.flush() 来接收最后一段输出
如果是一次性压缩解压可以直接调用 zlib.compress 。如果一定要用(de)compressobj 可以这样: cobj = zlib.compressobj() dobj = zlib.decmpressobj() data2 = cobj.compress(data1) data2 += cobj.flush() data3 = dobj.decompress(data2) data3 += dobj.flush() |
2
wingkou OP @lcdtyph 感谢,因为有个文件直接`zlib.compress`会报错,但是`zlib.decmpressobj().decompress()`却不会,才搞的这种写法。这问题也 Google 不到,大半夜还搞得焦头烂额的。不知道你知道有什么区别吗?
|
3
wingkou OP @lcdtyph 上面打快了,应该是`zlib.decompress()`会报错,但是`zlib.decmpressobj().decompress()`却不会。
|
4
owtotwo 2020-11-05 17:52:52 +08:00
建议把报错的 minimum 文件样例也列出来,不然不好复现
|