2016-05-19 77 views
0

我有.tar文件,其中包含其他tar文件和一些簡單的文本文件。理想情況下,我想將整個tar文件(包括sub .tar文件)讀取到內存數據結構中以供進一步操作。我正在尋找最有效的方式來處理這個問題。以下提供了tar第一級中的文件列表,但我需要檢測子.tar文件,然後解壓它們。Untar文件到內存數據結構

tar = tarfile.open("test.tar") 
#print tar.getmembers() 
#filenames = tar.getnames() 
for file in tar: 
    print (file.name) 

我試過使用is_tarfile()方法來檢查,但似乎需要一個文件名。

+0

爲什麼不只是mmap整個文件? –

+1

'tf = tarfile.open(mode ='r:gz',fileobj = fo) 'print tf.getnames() '我試過了,但是我得到了'AttributeError:'TarFile'對象沒有'fileno'屬性 – user1513388

回答

0

爲了進一步給你,這裏是一個遞歸程序才能解焦油成字符串,並試圖解開字符串作爲焦油

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一個文件名第一次,然後通過.extractfile()上提供的fileobj每個成員。最後一個打印顯示如何獲取文件的內容,如果它不是焦油。