0

我希望在 Python 3.8 中执行以下操作:

xz --decompress --stdout < hugefile.xz > hugefile.out

输入和输出都不适合内存。

当我阅读https://docs.python.org/3/library/lzma.html#lzma.LZMADecompressor上的文档时, 我可以使用LZMADecompressor来处理增量可用的输入,并且可以使用它的decompress () 函数来增量生成输出.

然而, LZMADecompressor似乎将其整个解压缩输出放入单个内存缓冲区,并且decompress () 从单个输入内存缓冲区读取其整个压缩输入。

诚然,文档让我感到困惑,什么时候输入和/或输出可以是增量的。

所以我想我将不得不产生一个单独的子进程来执行“xz”二进制文件。

有没有使用 lzma Python 模块来完成这个任务?

4

1 回答 1

0

而不是使用低级LZMADecompressor,使用lzma.open来获取文件对象。shutil然后,您可以使用该模块将数据复制到另一个文件对象中:

import lzma
import shutil

with lzma.open("hugefile.xz", "rb") as fsrc:
    with open("hugefile.out", "wb") as fdst:
        shutil.copyfileobj(fsrc, fdst)

在内部,shutils.copyfileobj以块的形式读取和写入数据,并且 LZMA 解压缩是即时完成的。这避免了将整个数据解压缩到内存中。

于 2022-01-08T11:59:58.890 回答