'/path/to/file.txt'
numaralı bir dosyaya sahip bir .tar dosyanız varsa, dosyayı '/path/to'
dizini oluşturmadan belirtilen bir dizine ayıklamak için bir yol var mı (Python'da)?Python: Tarfile kullanarak ayıkla ama dizinleri göz ardı etme
cevap
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.
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
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
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)
+ 1() ' – metasequoia
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
çalışacak Yani, ama o değil Dosya meta verilerini (değişiklik zamanı vb.) koruyun. –