Dateien rekursiv zippen

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
Taranis
User
Beiträge: 27
Registriert: Freitag 6. Januar 2006, 18:05

Hallo - Ich wieder -

Anfängerfrage:
Ich versuche mich momentan mit dem zipfile-Modul.
Kann mir mal jemand sagen, wie man komplette Verzeichnisse zippt.
Also rekursiv (inkl. Unterverzeichnisse) abarbeitet ...

Danke im Voraus
Taranis
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Wahrscheinlich in Verbindung mit os.walk
Also etwa so:

Code: Alles auswählen

import os, zipfile
Zip = zipfile.ZipFile("test.zip")
for dirname,dirs,filenames in os.walk("verzeichnis_zum_zippen"):
  for filename in filenames:
    Zip.write(os.path.join(dirname,filename))
Zip.close()
Du musst nur aufpassen, dass test.zip nicht in einem Verzeichnis erstellt wird, welches mit ins zip soll.
Taranis
User
Beiträge: 27
Registriert: Freitag 6. Januar 2006, 18:05

Danke Joghurt,
Das hat mir sehr geholfen

Taranis
.JROppenheimer

aber mit rekursiv hat das nüscht zu tun, oder?
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@.JROppenheimer

Braucht es doch auch nicht. os.walk läuft durch den kompletten Verzeichnisbaum.


Siehe hier
mfg, querdenker
BlackJack

.JROppenheimer hat geschrieben:aber mit rekursiv hat das nüscht zu tun, oder?
Doch: os.walk() geht rekursiv durch den Verzeichnisbaum. Die Funktion ist in Python geschrieben, kannst Du Dir also anschauen. Sind so ca. 30 Zeilen Quelltext.
bot
User
Beiträge: 20
Registriert: Montag 22. Mai 2006, 19:47

ich habe in einem ordner osteuropäische zeichen

unter windows werden diese auch "normal" angezeigt.

wenn ich jetzt die zip fkt benutze, kommen komische zeichen raus.

jetzt muss ich doch bei


Zip.write(os.path.join(dirname,filename))

noch irgendwie unicode reinbringen, ne? aber wie?
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Meinst du in einem Dateinamen, einer Datei die in dem Ordner liegt sind Osteuropäische Zeichen oder wie?
bot
User
Beiträge: 20
Registriert: Montag 22. Mai 2006, 19:47

ne ich habe in einem ordner ein file

hat z.b. den namen
týdnù.txt
wenn ich den namen in einem file reinschreibe ( dirname,filename )
dann steht darin auch
týdnù.txt
wenn ich jetzt aber das test.zip entzippe, heisst das file plötzlich


t²dn·.txt
BlackJack

Dateinamen in ZIPs sind ISO-8859-1 kodiert, oder sollten es zumindest sein. Wenn Du den Dateinamen in einer anderen Kodierung vorliegen hast, dann musst Du umkodieren.
bot
User
Beiträge: 20
Registriert: Montag 22. Mai 2006, 19:47

und wie mache ich das, mal dumm gefragt?

geht das auch generisch, wenn ich jetzt

-1 und -2 habe? oder reicht immer -2 da alle zeichen von -1 auch drin sind?
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Zeichen, die nicht in ISO 8859-1 enthalten sind, dürfen nicht in Dateinamen innerhalb eines ZIPS vorkommen.
bot
User
Beiträge: 20
Registriert: Montag 22. Mai 2006, 19:47

hmm also hab ich einen nachteil beim zipfile module

denn

winace und co. können die dinger ja auch zippen und beim entpacken dies ordnungsgemäss wiedergeben

gibts da ein besseres module unter python wo ich damit keine probleme habe?
Antworten