python-3.x - Python 3.7 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
块可确保您关闭文件(这也确保您实际完成写入磁盘)。
推荐阅读
- sql-server - ADServiceAccount 作为 SQL Server 代理的代理帐户 从 SSISDB 计划 SSIS 包
- sql - 基于另一个分组的条件分组
- .net - 是否可以为一种特定方法覆盖 SOAP 操作名称空间?
- download - 文件在 Chrome 中下载,但不在 Safari 中,但 console.log(response) 和 Network 选项卡显示从服务器发送的文件
- javascript - 如何停止绑定每个处理程序并声明变量“那个”
- multithreading - 防止同时运行功能
- c++ - 使用模板时出现 C++ 分段错误 11
- android - 找不到将数据库数据加载到其中的变量
- ruby - 使用带有参数的 proc 速记
- vba - 删除空白单元格 - 146,459 行