2016-12-16 99 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()。

相關問題