Python 3.7 zlib解压后比压缩后小

Python 3.7 zlib decompressed size is smaller than compressed

我写了一个小 python 代码,它应该解压缩一个 ~180Mb 的大二进制文件。问题是它只能解压缩大约 50Mb。 我想知道有没有人以前遇到过类似的,奇怪的问题,并找到了解决办法。

import zlib, sys
text = open('REG_E.rzp','rb').read()
print(sys.getsizeof(text))
# 187424785


decompressed = zlib.decompress(text)
print(sys.getsizeof(decompressed))
# 50001

附加信息:第一个解压缩的 50Mbytes 是正确的,并且可以在十六进制编辑器中读取。所以我想知道,一次可以解压多少 zlib 有限制吗?我没有收到任何错误消息,所以我对此一无所知。

您似乎没有正确关闭文件,因此文件可能没有完全写入:

import zlib, sys
with open('REG_E.rzp','rb') as f:
    text = f.read()
    print(sys.getsizeof(text))

decompressed = zlib.decompress(text)
print(sys.getsizeof(decompressed))

with open('cecomp.bin','wb') as f:
    f.write(decompressed)

recomp = zlib.compress(decompressed)
print(sys.getsizeof(recomp))
with open('recomp.bin','wb') as f:
    f.write(recomp)

添加 with 块确保您正在关闭文件(这也确保您实际完成写入磁盘)。

从文件扩展名来看,它似乎是用 rzip 压缩的,而不是 gzip。 Rzip 使用 bzip2,而不是 zlib 的 DEFLATE。 Python 的 zlib 模块可能无法读取该格式。

问题已解决。存档由多个压缩文件组成,必须逐个文件解压。