Как установить уровень сжатия при использовании `tarfile` со сжатием LZMA? - PullRequest
1 голос
/ 11 апреля 2019

Есть ли способ установить уровень сжатия при создании архива с использованием модуля tarfile в Python для сжатия LZMA (*.xz)?

Я использую следующую конструкцию, и мне интересно, если compresslevel аргумент ключевого слова для tarfile.open метод применим и к сжатию LZMA?

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

Документация несколько бесполезна в этом ...

1 Ответ

1 голос
/ 14 мая 2019

Похоже, 'compresslevel' не является опцией в 'tarfile'.

С помощью модуля 'lzma' это возможно.

Настройки сжатия могут быть заданы какпредустановленный уровень сжатия (с заданным аргументом) или подробно в виде пользовательской цепочки фильтров (с аргументом фильтров).

Предварительно заданный аргумент (если имеется) должен быть целым числом от 0 до 9 (включительно),необязательно ИЛИ-ed с константой 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

...