如何使用python3将lzma2(.xz)和zstd(.zst)文件解压缩到文件夹中?

2024-05-12 18:45:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我用.bz2文件工作了很长时间。为了将.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压缩,后者是{}。在

但是,我找不到一个简单的方法将这些归档文件的内容解压到一个文件夹中(就像我对.bz2文件所做的那样)。在

我怎样才能:

  1. 使用将.xzlzma2)文件的内容解压缩到一个文件夹中 Python3?在
  2. 使用python3将.zstZstandard)文件的内容解压到一个文件夹中?在

重要提示:我正在解压缩very large files,因此如果解决方案考虑到任何潜在的内存错误。在


Tags: 文件函数文件夹内容inputdatafolderdestination
1条回答
网友
1楼 · 发布于 2024-05-12 18:45:39

可以使用^{} module对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压缩,您可以使用^{}(由来自Mozilla和Mercurial项目的IndyGreg提供)或^{};后者可能太基本了,不能满足您的需要,而{}提供了一个特别适合读取文件的流式API。在

我在这里使用zstandard库是为了从它实现的复制API中获益,它允许您同时解压缩和复制,类似于shutil.copyfileobj()的工作方式:

^{pr2}$

相关问题 更多 >