我有.tar文件,其中包含其他tar文件和一些简单的文本文件。理想情况下,我想将整个tar文件(包括子.tar文件)读入内存数据结构中,以便进一步操作。我正在寻找最有效的方法来处理这个问题。以下提供了tar的第一级中的文件列表,但我需要检测子.tar文件然后解压缩它们。
tar = tarfile.open("test.tar")
#print tar.getmembers()
#filenames = tar.getnames()
for file in tar:
print (file.name)
我尝试使用is_tarfile()
方法进行检查,但这似乎需要一个文件名。
答案 0 :(得分:0)
为了让您更进一步,这是一个递归例程,将tar解压缩到字符串中并尝试将字符串解压缩为tar:
import tarfile
def unpack(filename, fileobj=None):
tar = tarfile.open(filename, fileobj=fileobj)
for file in tar.getmembers():
print (file.name)
contentfobj = tar.extractfile(file)
try:
unpack(None, fileobj=contentfobj)
except tarfile.ReadError:
# print ("not a tar")
print (contentfobj.read())
unpack("test.tar")
unpack
首次获取文件名,然后fileobj
为每个成员提供.extractfile()
。最后一个打印显示了如果文件不是tar,你如何获取文件的内容。