Tarfile in Tarfile transparent entpacken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pythongenuser
User
Beiträge: 9
Registriert: Donnerstag 16. August 2007, 11:19

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
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...
pythongenuser
User
Beiträge: 9
Registriert: Donnerstag 16. August 2007, 11:19

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?
pythongenuser
User
Beiträge: 9
Registriert: Donnerstag 16. August 2007, 11:19

Immer noch keine Ideen?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schnellschuss: Man könnte es auch in ein (c)StringIO-Objekt entpacken und von dort wieder laden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
pythongenuser
User
Beiträge: 9
Registriert: Donnerstag 16. August 2007, 11:19

@ 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ß
Antworten