使用Python zipfile库结合LZMA压缩时,如何设置有效压缩级别?
如何为Python创建的ZIP文件设置LZMA压缩级别
Python标准库的zipfile模块文档明确说明,使用LZMA压缩时compresslevel参数不会生效。要自定义LZMA压缩级别,需要手动创建LZMA压缩流并写入ZIP文件,具体实现如下:
实现思路与步骤
- 导入
zipfile和lzma模块 - 创建
ZipFile对象时指定压缩方式为ZIP_LZMA - 不直接使用
zipfile的write()方法,而是通过open()获取ZIP内的文件句柄,用lzma.LZMAFile包装该句柄并指定压缩级别 - 将源文件内容写入包装后的LZMA压缩流
示例代码
import zipfile import lzma import os def add_file_with_lzma_level(zip_path, file_path, compress_level=6): with zipfile.ZipFile(zip_path, 'a', compression=zipfile.ZIP_LZMA) as zf: arcname = os.path.basename(file_path) with zf.open(arcname, 'w') as zf_file: # preset参数对应LZMA压缩级别,范围0-9,数值越高压缩率越高、耗时越长 with lzma.LZMAFile(zf_file, mode='w', preset=compress_level) as lzma_file: with open(file_path, 'rb') as src_file: lzma_file.write(src_file.read()) # 使用示例:将test.txt添加到test.zip,设置最高压缩级别9 add_file_with_lzma_level('test.zip', 'test.txt', compress_level=9)
相关参考(针对tarfile)
如果是tarfile结合LZMA压缩,可直接在创建TarFile对象时通过preset参数指定压缩级别:
import tarfile with tarfile.open('test.tar.xz', 'w:xz', preset=9) as tf: tf.add('test.txt')
内容的提问来源于stack exchange,提问作者ideasman42
相关产品推荐
相关产品推荐

