Данные LZMA можно распаковать с помощью модуля lzma
, просто откройте файл с этим модулем, а затем используйте shutil.copyfileobj()
, чтобы эффективно скопировать распакованные данные на выходфайл без проблем с памятью:
import lzma
import pathlib
import shutil
def decompress_lzma_to_folder(input_file):
input_file = pathlib.Path(input_file)
with lzma.open(input_file) as compressed:
output_path = pathlib.Path(destination_dir) / input_file.stem
with open(output_path, 'wb') as destination:
shutil.copyfileobj(compressed, destination)
Стандартная библиотека Python пока не поддерживает сжатие Zstandard, вы можете использовать либо zstandard
(от IndyGreg из Mozilla)и проект Mercurial) или zstd
;последнее, возможно, слишком базовое для ваших нужд, в то время как zstandard
предлагает потоковый API, специально предназначенный для чтения файлов.
Я использую здесь библиотеку zstandard
, чтобы воспользоваться преимуществами реализуемого им API копирования, которыйпозволяет распаковывать и копировать одновременно, как работает shutil.copyfileobj()
:
import zstandard
import pathlib
import shutil
def decompress_zstandard_to_folder(input_file):
input_file = pathlib.Path(input_file)
with open(input_file, 'rb') as compressed:
decomp = zstandard.ZstdDecompressor()
output_path = pathlib.Path(destination_dir) / input_file.stem
with open(output_path, 'wb') as destination:
decomp.copy_stream(compressed, destination)