Hallo,
ich muss in Python ein Programm schreiben, mit dem ich mehrfach gezippte
Dateien entpacken und lesen kann. Die einzelnen Datendateien sind
gepackt und immer mehrere Datendateien sind nochmals in einem Zipfile
zusammengefügt worden.
Beispiel:
Ebene_1:
========
Datensatz1.zip
Datensatz2.zip
Datensatz3.zip
Datensatz4.zip
Diese vier Datensätze sind nochmals zusammengepackt in der Datei
Ebene_0 (Verzeichnisname F:\Test):
==================================
Datensaetze1-4.zip
Datensaetze5-8.zip
Datensaetze9-12.zip
Zum Entzippen verwende ich die Bibliothek
import zipfile
Wie bin ich bisher vorgegangen?
Zuerst habe ich alle Zip-Dateien der Ebene 0 im Verzeichnis bestimmt und
in einer Liste gespeichern (list_layer_0).
In einer for-Schleife gehe ich list_layer_0 durch und bestimme die
Dateinamen der Dateien in der Ebene 1.
1 | #!/usr/bin/env python
|
2 |
|
3 | import os
|
4 | import zipfile
|
5 |
|
6 | # zip-file-path
|
7 | zip_file_path = "F:\\test"
|
8 |
|
9 | index = 0
|
10 |
|
11 | if os.path.isdir (zip_file_path) == True:
|
12 | print "Verzeichnis existiert"
|
13 | os.chdir (zip_file_path)
|
14 | list_layer_0 = os.listdir (zip_file_path)
|
15 | # print filelist
|
16 | print len ( list_layer_0 )
|
17 | index = index + 1
|
18 | ucount = 0
|
19 | for file_in_list_layer_0 in list_layer_0:
|
20 | # print file_in_list_layer_0
|
21 | ucount = ucount+1
|
22 | if ucount == 1:
|
23 | f_0 = file (file_in_list_layer_0)
|
24 | z_0 = zipfile.ZipFile (f_0, "r")
|
25 | list_layer_1 = z_0.namelist()
|
26 | z_0_file = z_0.open (file_in_list_layer_0)
|
27 | for file_in_list_layer_1 in list_layer_1:
|
28 | print file_in_list_layer_1
|
29 | f_1 = file (file_in_list_layer_1)
|
30 | z_1 = zipfile.ZipFile (f_1, "r")
|
31 |
|
32 | z_1.close ()
|
33 |
|
34 | z_0.close ()
|
35 |
|
36 | else:
|
37 | print "Verzeichnis existiert nicht"
|
Das "ucount" dient nur dazu, für den Testzweck eine Datei der Ebene 0 zu
öffnen, wenn es funktioniert, kann diese if-Bedingung entfernt werden
und es werden dann alle Dateien der Ebene 0 genommen.
Ich weis momentan nicht, wie ich das Problem angehen soll. Ich möchte
jetzt z.B. die Datei Datensatz1.zip in Datensaetze1-4.zip öffnen und den
Inhalt auslesen.
Die Beispiele von Python, die ich bisher gefunden habe, gehen nur davon
aus, dass es sich nur um eine gezippte Ebene handelt. Dort könnte ich
einfach mit einem read-Befehl den Inhalt der Datei auslesen
1 | filecontent = z_0.read()
|
Ich müsste in der zweiten Schleife so arbeiten:
1 | filecontent = z_1.read()
|
Da kommt aber die Fehlermeldung, dass die Datei nicht existiert.
Meine Idee wäre jetzt folgende - ich muss mir ein temporäres Verzeichnis
erstellen, in das ich eine Datei aus der Ebene 0 nehme
(Datensaetze1-4.zip), die in dem Temp-Verzeichnis entpacke und dann hab
ich nur noch eine Ebene von Zip-Dateien, die ich öffnen, lesen und
wieder schließen kann.
Gäbe es noch andere Möglichkeiten? Über ein paar Ideen oder Tipps würde
ich mich sehr freuen.