我有一个包含其他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获取成员或内容。
答案 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