在.tar文件

时间:2016-05-19 17:29:50

标签: python tar

我有一个包含其他tar档案的tar档案。以下示例完美地提取主.tar文件,但我在访问其他.tar文件时遇到问题。

import tarfile
import os

fd = tarfile.open('test.tar')
for member in fd.getmembers():
    if not member.isfile():
        continue

    cfile = fd.extractfile(member)
    name = cfile.name
    filename, file_extension = os.path.splitext(name)
    #print filename + "----" + file_extension

    if file_extension == ".tar":
        print cfile
    #print cfile.read()
    print cfile.name
    cfile.close()
fd.close()

返回以下内容:

file1.txt
file2.txt
<tarfile.ExFileObject object at 0x101989690>
tar1.tar

所以我可以访问tar1.tar文件对象。但是,我无法弄清楚如何从tar1.tar获取成员或内容。

1 个答案:

答案 0 :(得分:1)

cfile作为fileobj参数传递给tarfile.open()的新来电。

import tarfile
import os

def list_contents(name, fileobj=None, prefix=''):
    fd = tarfile.open(name, fileobj=fileobj)
    for member in fd.getmembers():
        if not member.isfile():
            continue
        cfile = fd.extractfile(member)
        name = cfile.name
        filename, file_extension = os.path.splitext(name)
        print prefix + cfile.name
        if file_extension == '.tar':
            list_contents(name, cfile, prefix+'    ')
        cfile.close()
    fd.close

list_contents('x.tar')

测试:

$ touch a b c x y z
$ tar cf y.tar x y z
$ tar cf x.tar a b y.tar c
$ python t.py
a
b
y.tar
    x
    y
    z
c