Zip in Zip (in Zip)

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
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

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?
BlackJack

@Papp Nase: Schau Dir mal `io.BytesIO` an.
Papp Nase
User
Beiträge: 139
Registriert: Dienstag 11. März 2014, 15:12

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?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Antworten