代码如下:
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 ![]() (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 文件样例也列出来,不然不好复现 |