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

Code: Alles auswählen

tarfile.open(FileLikeObject)
ö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ß