python tar文件如何将文件提取到流中

时间:2012-11-26 09:36:19

标签: python stream tar

我正在尝试提取压缩文件夹但不是直接使用.extractall(),而是想将文件解压缩为流,以便我自己处理流。是否可以使用tarfile来完成?或者有任何建议吗?

2 个答案:

答案 0 :(得分:14)

您可以使用file方法从tar文件中获取每个文件作为python .extractfile()对象。遍历tarfile.TarFile()实例以列出所有条目:

import tarfile

with tarfile.open(path) as tf:
    for entry in tf:  # list each entry one by one
        fileobj = tf.extractfile(entry)
        # fileobj is now an open file object. Use `.read()` to get the data.
        # alternatively, loop over `fileobj` to read it line by line.

答案 1 :(得分:0)

当网络流式传输tar文件时,我无法extractfile,我做了类似的事情:

from backports.lzma import LZMAFile
import tarfile
some_streamed_tar = LZMAFile(requests.get('http://some.com/some.tar.xz').content)
with tarfile.open(fileobj=some_streamed_tar) as tf:
    tarfileobj.extractall(path="/tmp", members=None)

阅读它们:

for fn in os.listdir("/tmp"):
    with open(os.path.join(t, fn)) as f:
        print(f.read())

python 2.7.13