如何使用Python实现与zlib-flate命令等效的压缩文件解压功能
用Python标准库自带的zlib模块就能实现和zlib-flate -uncompress完全一致的解压效果,核心是要匹配zlib-flate默认处理原始deflate流的行为,配置正确的解压参数即可。
完整可执行脚本(支持大文件,内存占用低)
直接对应你给出的命令行功能,接收输入压缩文件路径和输出文件路径作为参数:
import zlib import sys def main(): if len(sys.argv) != 3: print(f"用法: {sys.argv[0]} <输入压缩文件路径> <输出解压文件路径>") sys.exit(1) decompressor = zlib.decompressobj(wbits=-15) with open(sys.argv[1], "rb") as f_in, open(sys.argv[2], "wb") as f_out: # 分块读取避免大文件占用过多内存 for chunk in iter(lambda: f_in.read(4096), b""): f_out.write(decompressor.decompress(chunk)) # 写入解压缓冲中剩余的数据 f_out.write(decompressor.flush()) if __name__ == "__main__": main()
运行方式:python3 脚本名.py inputfile outfile
简化版本(适合小文件)
如果你的压缩文件体积不大,可以直接一次性读写:
import zlib # 读取压缩文件内容 with open("inputfile", "rb") as f: compressed_data = f.read() # 解压,wbits=-15对应处理无zlib头/校验尾的原始deflate流 decompressed_data = zlib.decompress(compressed_data, wbits=-15) # 写入解压结果 with open("outfile", "wb") as f: f.write(decompressed_data)
关键参数说明
wbits=-15是匹配zlib-flate默认行为的核心配置:zlib模块默认的wbits值为15,会校验标准zlib格式的文件头和尾部校验和,而zlib-flate默认处理的是没有头和校验尾的原始deflate压缩流,需要传入负值的wbits跳过校验。如果运行时报校验错误,可以尝试将wbits=-15改为wbits=15适配带标准zlib头的压缩文件。
内容的提问来源于stack exchange,提问作者user4981459
相关产品推荐
相关产品推荐

