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 模块可能无法读取该格式。
问题已解决。存档由多个压缩文件组成,必须逐个文件解压。
我写了一个小 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 模块可能无法读取该格式。
问题已解决。存档由多个压缩文件组成,必须逐个文件解压。