可以使用lzma module解压缩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(由Mozilla和Mercurial项目提供的IndyGreg)或zstd.后者可能对于您的需求来说太基础了,而zstandard提供了特别适合于读取文件的流API.
我在这里使用zstandard库来受益于它实现的复制API,该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)