Seite 1 von 1
Tarfile in Tarfile transparent entpacken
Verfasst: Mittwoch 21. November 2007, 14:56
von pythongenuser
Hallo,
ich habe tar.gz-Archive, in denen tgz-Files gepackt sind.
Jetzt wurde ich diese gerne automatisch auswerten, ohne jedes mal erst alle tar.gz-Archive zu entpacken.
Leider funktioniert aber
Code: Alles auswählen
import tarfile
t = tarfile.open(somefile.tar.gz)
tt = tarfile.open(t.getnames()[0])
nicht (Das erste File in jedem tar.gz-Archiv ist das tgz-File).
Geht das irgendwie anders?
Was ist eine Alternative?
Gruss
Re: Tarfile in Tarfile transparent entpacken
Verfasst: Freitag 23. November 2007, 19:43
von lunar
pythongenuser hat geschrieben:Hallo,
ich habe tar.gz-Archive, in denen tgz-Files gepackt sind.
Jetzt wurde ich diese gerne automatisch auswerten, ohne jedes mal erst alle tar.gz-Archive zu entpacken.
Und wie soll das praktisch ablaufen? Das "innere" Archiv ist durch die Kompression des äußeren Archivs "verstümmelt", d.h. als tar unlesbar. Man muss es also notwendigerweise erstmal entpacken, bevor man es als tarfile lesen kann...
Verfasst: Sonntag 25. November 2007, 19:22
von pythongenuser
Naja, ich kann ja transparent entpacken als ein FileLikeObject. Leider kann ich dieses nicht mit
öffnen. Gibt es andere Archivverwalter, mit denen das geht?
Verfasst: Montag 10. Dezember 2007, 14:03
von pythongenuser
Immer noch keine Ideen?
Verfasst: Montag 10. Dezember 2007, 14:29
von Zap
Ich würde mir da keinen so größen Kopf drum machen.
Einfach das tempfile modul nehmen den kram entpacken, das entpackte öffnen und anschließend alle temporären daten wieder wegschmeißen. Warum muss das ganze direkt im Speicher passieren?
Verfasst: Montag 10. Dezember 2007, 19:44
von Leonidas
Schnellschuss: Man könnte es auch in ein (c)StringIO-Objekt entpacken und von dort wieder laden.
Verfasst: Donnerstag 20. Dezember 2007, 12:47
von pythongenuser
@ zap und lenonidas
Danke für die Antworten, gibt eine andere Möglichkeit:
Code: Alles auswählen
t = tarfile.open('file.tar.gz')
names = t.getnames()
tt = t.extractfile(names[0]) #<-- ist das file.tgz
ttt = tarfile.open('', fileobj=tt)
Hatte ich übersehen, dass die open-Methode diese Option bietet.
Schönen Gruß