2011-12-06 6 views

cevap

0

Belirli bir dosyayı ayıklamak için TarFile.extractfile(member) kullanabilirsiniz.

Size ardından istediğiniz herhangi bir yere bir dosyaya içeriğini yazmak için kullanabileceğiniz bir filelike nesnesi (tipik Python) döndürür.

+0

çalışacak Yani, ama o değil Dosya meta verilerini (değişiklik zamanı vb.) koruyun. –

2

tarfile modülü gereğince, kolayca yapabilirsiniz. Henüz kontrol etmedim.

TarFile.extract(member, path="") 

Dokümantasyon:

tam adını kullanarak, geçerli çalışma dizinine arşivden bir üyeyi Özü. Dosya bilgisi mümkün olduğunca doğru şekilde çıkarılır. üye bir dosya adı veya TarInfo nesnesi olabilir. Yolu kullanarak farklı bir dizin belirtebilirsiniz. http://docs.python.org/library/tarfile.html

+0

docs "tam adı" aslında bir yoldur, "tam adını kullanarak, geçerli çalışma dizinine" derken. "Tam yolunu kullanarak, geçerli çalışma dizininden başlayarak ... daha doğru bir şekilde söyleyebilirler. Yolu kullanarak farklı bir başlangıç ​​dizini belirtebilirsiniz." Yani bu cevap işe yaramayacak. ekhumoro'nun cevabı daha iyi görünüyor. os.path.basename 'yaklaşık hatırlatma – Weeble

7

bir TarInfo nesnenin veri özellikleri yazılabilirdir:

Yani

TarFile.extract(member, path=".") 

tam belgelere bakın yapmak mümkün olmalıdır. Dolayısıyla, sadece ne istersen için name değiştirin ve sonra ayıkla: komple örnek Ben de bu sorunu karşılamak

import sys, os, tarfile 

args = sys.argv[1:] 
tar = tarfile.open(args[0]) 
member = tar.getmember(args[1]) 
member.name = os.path.basename(member.name) 
path = args[2] if len(args) > 2 else '' 
tar.extract(member, path) 
+0

+ 1() ' – metasequoia

9

ve listelemek ekhumoro en Yanıta göre

import os, tarfile 
output_dir = "." 
tar = tarfile.open(tar_file) 
for member in tar.getmembers(): 
    if member.isreg(): # skip if the TarInfo is not files 
    member.name = os.path.basename(member.name) # remove the path by reset it 
    tar.extract(member,output_dir) # extract