8.4.2 从归档读取元数据
可以使用TarFile类直接处理一个tar归档文件。这个类支持一些方法来读取现有归档文件的有关数据,还可以通过增加更多文件来修改归档。要读取一个现有归档文件中的文件名,可以使用getnames()。
import tarfile
with tarfile.open('example.tar','r') as t:
print(t.getnames())
这个函数的返回值是一个字符串列表,包含归档内容中的文件名。
运行结果:
linux下创建tar文件命令: tar -cf example.tar README.txt index.rst
除了文件名之外,还可以得到归档成员的元数据(作为TarInfo对象的实例)。
import tarfile
import time
with tarfile.open('example.tar','r') as t:
for member_info in t.getmembers():
print(member_info.name)
print(' Modified:',time.ctime(member_info.mtime))
print(' Mode :',oct(member_info.mode))
print(' Type :',member_info.type)
print(' Size :',member_info.size,'bytes')
print()
可以通过getmembers()和getmember()加载元数据。
如果提前已经知道归档成员名,则可以用getmember()获取其TarInfo对象。
import tarfile
import time
with tarfile.open('example.tar','r') as t:
for filename in ['README.txt','notthere.txt']:
try:
info = t.getmember(filename)
except KeyError:
print('ERROR:Did not find {} in tar archive'.format(
filename))
else:
print('{} is {:d} bytes'.format(info.name,info.size))
如果归档成员不存在,则getmember()会产生一个KeyError。
运行结果: