如何使用 Python 3 将 lzma2 (.xz) 和 zstd (.zst) 文件解压到一个文件夹中?
How to decompress lzma2 (.xz) and zstd (.zst) files into a folder using Python 3?
我已经使用 .bz2
个文件工作了很长时间。要将 unpack/decompress .bz2
文件放入特定文件夹,我一直在使用以下功能:
destination_folder = 'unpacked/'
def decompress_bz2_to_folder(input_file):
unpackedfile = bz2.BZ2File(input_file)
data = unpackedfile.read()
open(destination_folder, 'wb').write(data)
最近我获得了一个文件列表,其中包含 .xz
(不是 .tar.xz
)和 .zst
扩展名。我可怜的研究技能告诉我,前者是lzma2
压缩,后者是Zstandard
。
但是,我找不到将这些档案的内容解压缩到文件夹中的简单方法(就像我处理 .bz2
文件一样)。
我怎样才能:
- 将
.xz
(lzma2
) 文件的内容解压缩到一个文件夹中,使用
Python3个?
- 使用 Python 3?
将 .zst
(Zstandard
) 文件的内容解压缩到一个文件夹中
重要说明:我正在拆包very large files,所以如果解决方案考虑到任何潜在的内存错误。
可以使用 lzma
module, simply open the file with that module, then use shutil.copyfileobj()
解压缩 LZMA 数据,以有效地将解压缩的数据复制到输出文件,而不会 运行 进入内存问题:
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
(by IndyGreg from Mozilla and the Mercurial project) or zstd
;后者可能对您的需求来说太基础了,而 zstandard
提供了一个流媒体 API 特别适合阅读文件。
我在这里使用 zstandard
库来受益于它实现的复制 API,它允许您同时解压缩和复制,类似于 shutil.copyfileobj()
的工作方式:
import zstandard
import pathlib
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)
我已经使用 .bz2
个文件工作了很长时间。要将 unpack/decompress .bz2
文件放入特定文件夹,我一直在使用以下功能:
destination_folder = 'unpacked/'
def decompress_bz2_to_folder(input_file):
unpackedfile = bz2.BZ2File(input_file)
data = unpackedfile.read()
open(destination_folder, 'wb').write(data)
最近我获得了一个文件列表,其中包含 .xz
(不是 .tar.xz
)和 .zst
扩展名。我可怜的研究技能告诉我,前者是lzma2
压缩,后者是Zstandard
。
但是,我找不到将这些档案的内容解压缩到文件夹中的简单方法(就像我处理 .bz2
文件一样)。
我怎样才能:
- 将
.xz
(lzma2
) 文件的内容解压缩到一个文件夹中,使用 Python3个? - 使用 Python 3? 将
.zst
(Zstandard
) 文件的内容解压缩到一个文件夹中
重要说明:我正在拆包very large files,所以如果解决方案考虑到任何潜在的内存错误。
可以使用 lzma
module, simply open the file with that module, then use shutil.copyfileobj()
解压缩 LZMA 数据,以有效地将解压缩的数据复制到输出文件,而不会 运行 进入内存问题:
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
(by IndyGreg from Mozilla and the Mercurial project) or zstd
;后者可能对您的需求来说太基础了,而 zstandard
提供了一个流媒体 API 特别适合阅读文件。
我在这里使用 zstandard
库来受益于它实现的复制 API,它允许您同时解压缩和复制,类似于 shutil.copyfileobj()
的工作方式:
import zstandard
import pathlib
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)