首页 > 解决方案 > 使用带有 LZMA 压缩的“tarfile”时如何设置压缩级别?

问题描述

tarfile有没有办法在使用Python 中的 LZMA ( ) 压缩模块创建存档时设置压缩级别*.xz

我正在使用以下构造,我想知道方法的compresslevel关键字参数是否tarfile.open也适用于 LZMA 压缩?

tarfile.open(tar_file_path, 'w:xz', compresslevel=9) as tf:
    ...

该文档对此有些无益...

标签: python-3.xpython-3.7lzmatarfile

解决方案


看起来 'compresslevel' 不是 'tarfile' 中的一个选项。

使用“lzma”模块是可能的。

压缩设置可以指定为预设压缩级别(使用预设参数),也可以详细指定为自定义过滤器链(使用过滤器参数)。

预设参数(如果提供)应该是介于 0 和 9(含)之间的整数,可选择与常量 PRESET_EXTREME 进行或运算。如果既没有给出预设也没有给出过滤器,默认行为是使用 PRESET_DEFAULT(预设级别 6)。较高的预设会产生较小的输出,但会使压缩过程变慢。

import lzma
my_filters = [
    {"id": lzma.FILTER_DELTA, "dist": 5},
    {"id": lzma.FILTER_LZMA2, "preset": 7 | lzma.PRESET_EXTREME},
]
with lzma.open("file.xz", "w", filters=my_filters) as f:
    f.write(b"blah blah blah")

请检查使用 LZMA 算法的压缩


推荐阅读