首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.8 lzma解压缩巨大文件增量输入和输出

Python3.8 lzma解压缩巨大文件增量输入和输出
EN

Stack Overflow用户
提问于 2021-09-03 07:58:35
回答 1查看 252关注 0票数 0

在Python3.8中,我想做的相当于:

代码语言:javascript
复制
xz --decompress --stdout < hugefile.xz > hugefile.out

中,输入和输出都不能很好地存储在内存中。

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

但是,LZMADecompressor似乎将其全部解压输出放入单个内存缓冲区,而decompress()则从单个输入内存缓冲区读取其全部压缩输入。

当然,文档使我对输入和/或输出何时可以增量感到困惑。

因此,我想我必须生成一个单独的子进程来执行"xz“二进制文件。

是否可以使用lzma Python模块来执行此任务?

EN

回答 1

Stack Overflow用户

发布于 2022-01-08 11:59:58

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

代码语言:javascript
复制
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解压缩是动态进行的。这避免了将整个数据解压缩到内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69041419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档