2015-11-20 4 views
2

У меня есть tar-файл, содержащий сжатые tar-файлы. Например:python tarfile рекурсивный экстракт в памяти

[email protected]:~$ tar tf test.tar 
File1.tar.gz 
File2.tar.gz 
File3.tar.gz 
File4.tar.gz 

tarfile ожидает, что в качестве файла откроется строка. Есть ли вообще передать это файл-объект?

tar = tarfile.open('test.tar', 'r') # Unpack tar 
for item in tar: 
    Bundle=tar.extractfile(item) # Pull out the file 
    t = tarfile.open(Bundle, "r:gz") # Unpack tar 
    for tItem in t: 
    ... 

Спасибо.

+1

С [ 'tarfile.open'] (https://docs.python.org/3/library/tarfile.html#tarfile.open): _" Если указан fileobj, он используется в качестве альтернативой файловому объекту, открытому в двоичном режиме для имени. Предполагается, что он находится в позиции 0. "_. 'tar.extractfile (fileobj = Bundle, mode =" r: gz ")' –

ответ

1

определение tarfile.open выглядит следующим образом def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs):

И питон documentation говорит, что

Если указана fileobj, он используется в качестве альтернативы к файловому объекту открыта для имени. Предполагается, что он находится в положении 0.

поэтому, вместо того, чтобы называть его позиционным аргументом, вы можете вызвать его с помощью аргумента ключевого слова. Передайте fileobj вместо имени.

import tarfile 

f = open('archive.tar', 'rb') 
print (f) 
tar = tarfile.open(fileobj=f, mode='r:') # Unpack tar 
for item in tar: 
    print(item) 
Смежные вопросы