如何从Python中使用管道tar.extractall

2024-10-01 19:15:01 发布

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

我使用python的tarfile模块提取tarball。我不想把提取的文件写在磁盘上,而是直接通过管道传输到另一个程序,特别是bgzip。我也在尝试使用StringIO来解决这个问题,但是我甚至在那个阶段也会被卡住-tarball会被提取到磁盘上。在

#!/usr/bin/env python
import tarfile, StringIO
tar = tarfile.open("6genomes.tgz", "r:gz")
def enafun(members):
    for tarkati in tar:
        if tarkati.isreg():
            yield tarkati
reles = StringIO.StringIO()
reles.write(tar.extractall(members=enafun(tar)))
tar.close()

那么如何正确地管道输出所有的焦油提取?在


Tags: 模块文件程序管道tar阶段磁盘tarball
1条回答
网友
1楼 · 发布于 2024-10-01 19:15:01

您不能使用extractall方法,但可以使用getmembersextractfile方法:

#!/usr/bin/env python
import tarfile, StringIO
reles = StringIO.StringIO()
with tarfile.open("6genomes.tgz", "r:gz") as tar:
    for m in tar.members():
        if m.isreg():
            reles.write(tar.extractfile(m).read())
# do what you want with "reles".

根据文档,extractfile()方法可以接受一个TarInfo并将返回一个类似于文件的对象。然后可以使用read()获取该文件的内容。在

[编辑]我添加了您在注释中要求我的内容,因为注释中的格式似乎无法正确呈现。在

^{pr2}$

相关问题 更多 >

    热门问题