Seite 1 von 1

Zip in Zip (in Zip)

Verfasst: Donnerstag 20. März 2014, 21:25
von Papp Nase
Hallo,

ich habe eine Zip-Datei, in der sind Zipdateien_a und in diesen Zipdateien_a sind nochmal Zipdateien_b und in diesen Zipdateien_b sind Daten.

Hauptzip - Zip_a1 - Zip_b1 - Datei a
- ----------------------------- Datei b
- --------------------------- - Datei c
- ----------------------------- Datei d
- ----------------------------- Datei e
--------------------- Zip_b2 - Datei a
------------------------------- Datei b
------------------------------- Datei c
------------------------------- Datei d
-------------------------------- Datei e

Ich übe mit dem Modul zipfile.

Ich öffne zunächst die Datei Hauptzip und hole mir die Datei Zip_a1 heraus:

Code: Alles auswählen

import os
import zipfile

zf = zipfile.ZipFile (Hauptzip)
data = zf.read(Zip_a1)

Jetzt muss ich natuerlich den Dateninhalt unter data auch nochmal dekomprimieren.

Zf2 = zipfile.Zipfile (data) geht nicht, weil die Funktion eine reale Datei erwartet.

Ich habe eine Funktion gefunden, mit der ich die Datei extrahieren kann und dann die Datei Zip_a1 physich entpackt auf dem Datenträger vorhanden ist (die dann z.B. in ein temp-Verzeichnis gepakt wird).

Gibt es auch eine Funktion zum Dekomprimieren, wo ich dierekt eine Variable (data) hinsenden kann?

Re: Zip in Zip (in Zip)

Verfasst: Donnerstag 20. März 2014, 21:32
von BlackJack
@Papp Nase: Schau Dir mal `io.BytesIO` an.

Re: Zip in Zip (in Zip)

Verfasst: Mittwoch 9. April 2014, 09:45
von Papp Nase
Hallo Black Jack,

ich habe mir das Modul io.BytesIO angeschaut. Kannst Du mir einen Tipp geben, was Du genauer damit meintest?

Meintest Du damit vielleicht, dass ich die erste Zip-Datei entpacken und die entpackten Daten nicht temporär auf der HDD speichern soll, sondern binär in einer Variable, auf die ich mit der BytesIO lese und schreibe?

Re: Zip in Zip (in Zip)

Verfasst: Mittwoch 9. April 2014, 09:51
von snafu
Mach einfach `data = BytesIO(zf.read(Zip_a1))`. Und selbstverständlich solltest du dir für deine Aufgabe Gedanken über eine Schleife machen, in der selbständig erkannt wird, ob es sich um eine weitere Zip-Datei handelt, die abermals entpackt werden muss.