2011-12-06 17 views

Odpowiedz

0

Można użyć TarFile.extractfile(member), aby wyodrębnić określony plik.

Zwraca obiekt typu filelike (typowy język Python), którego można następnie użyć do zapisania zawartości do pliku w dowolnym miejscu.

+0

To będzie działać, ale to nie robi Zachowaj metadane pliku (czas modyfikacji itp.). –

2

Zgodnie z modułem tarfile możesz to łatwo zrobić. Nie sprawdziłem jeszcze.

TarFile.extract(member, path="") 

Dokumentacja:

Extract członu z archiwum do bieżącego katalogu roboczego, wykorzystując jego imię i nazwisko. Informacje o plikach są wyodrębniane tak dokładnie, jak to możliwe. członkiem może być nazwa pliku lub obiekt TarInfo. Możesz podać inny katalog za pomocą ścieżki.

więc powinieneś być w stanie zrobić

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

Zobacz pełną dokumentację w: http://docs.python.org/library/tarfile.html

+0

Gdy dokumenty mówią "do bieżącego katalogu roboczego, używając jego pełnej nazwy", "pełne imię i nazwisko" jest w rzeczywistości ścieżką. Mogą dokładniej powiedzieć "używając pełnej ścieżki, zaczynając od bieżącego katalogu roboczego ... Możesz podać inny katalog początkowy, używając ścieżki." Ta odpowiedź nie zadziała. Odpowiedź ekhumoro wydaje się lepsza. – Weeble

7

Atrybuty danych o TarInfo obiektu są zapisu. Tak po prostu zmienić name aby cokolwiek chcecie, a następnie rozpakuj go:

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 za przypomnienie o 'os.path.basename()' – metasequoia

9

spotkam tego problemu, jak również i wymienić kompletny przykład na podstawie odpowiedzi ekhumoro za

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 
Powiązane problemy