2016-12-16 98 views
0

我想从tar归档中获取单个文件。我有tar文件库,我可以做这样的事情找到一个列表中的文件与正确的扩展名:使用python中的tarfile lib获取tar文件中的单个文件

像他们的例子:

def xml_member_files(self,members): 
    for tarinfo in members: 
     if os.path.splitext(tarinfo.name)[1] == ".xml": 
      yield tarinfo 


    member_file = self.xml_member_files(tar) 
    for m in member_file:   
     print m.name 

这是伟大的,输出是:

RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutBeta.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutGamma.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/lutSigma.xml 
RS2_C0RS2_OK67683_PK618800_DK549742_SLA23_20151006_234046_HH_SLC/product.xml 

如果我说只是查找product.xml,那么它不起作用。所以我试过这个:

ti = tar.getmember('product.xml') 
    print ti.name 

它并没有找到product.xml,因为我是在猜测路径信息。我不知道如何检索那些路径信息,以便我可以在解压缩后获取我的product.xml文件(无论如何,我感觉我正在以艰难的方式进行操作),但是,我怎样才能找出路径,以便可以连接它到我的其他文件函数来读取和加载该文件后,它是唯一的文件从一个tar文件中提取?

+0

请仔细阅读我的回答如下,并给予好评或标记为已所接受,如果它通过对问题的思维帮助你。 –

回答

2

通过遍历getnames()的结果来返回完整路径。例如,为了获得完整路径lutBeta.xml

tar = tarfile.TarFile('mytarfile.tar') 
membername = [x for x in tar.getnames() if os.path.basename(x) == 'lutBeta.xml'][0] 
1

我会先尝试TarFile.getnames(),我认为它的作用很像命令行中的tar tzf filename.tar.gz。然后,你会发现什么路径饲料给你的getmember()或getmembers()。

相关问题