Сообщить об ошибке.

Модуль lzma в Python, работа с архивами lzma

Работа с архивами lzma, расширение .xz, .7z

Модуль lzma предоставляет классы и вспомогательные функции для сжатия и распаковки данных с использованием алгоритма сжатия LZMA. Также включен файловый интерфейс, поддерживающий форматы файлов .xz и .lzma, используемые bash утилитой xz, а также необработанные сжатые потоки.

Интерфейс, предоставляемый этим модулем, очень похож на интерфейс модуля bz2. Однако обратите внимание, что lzma.LZMAFile не является потокобезопасным, в отличие от bz2.BZ2File, поэтому, если необходимо использовать один экземпляр lzma.LZMAFile из нескольких потоков, необходимо защитить его с помощью блокировки.

Примеры использования:

Создание сжатого файла:

import lzma

data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
    f.write(data)

Чтение в сжатого файла:

import lzma

with lzma.open("file.xz") as f:
    file_content = f.read()

Сжатие данных в памяти:

import lzma

data_in = b"Insert Data Here"
data_out = lzma.compress(data_in)

Инкрементное сжатие, т. е. сжатие данных, поступающих частями:

import lzma

lzc = lzma.LZMACompressor()
out1 = lzc.compress(b"Some data\n")
out2 = lzc.compress(b"Another piece of data\n")
out3 = lzc.compress(b"Even more data\n")
out4 = lzc.flush()
# Concatenate all the partial results:
result = b"".join([out1, out2, out3, out4])

Запись сжатых данных в уже открытый файл:

import lzma

with open("file.xz", "wb") as fp:
    with lzma.open(fp, "w") as lzf:
        lzf.write("Эти данные будут сжаты\n".encode('utf-8'))
    fp.write("Эти данные будут не сжаты\n".encode('utf-8'))

Создание сжатого файла с использованием пользовательской цепочки фильтров:

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 fp:
    fp.write(b"blah blah blah")