Ordner im Zip-Format archivieren

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
Thison
User
Beiträge: 1
Registriert: Mittwoch 7. August 2013, 15:00

Hallo zusammen,
ich bin absoluter Neuling was Python angeht und wollte zur Übung ein kleines Programm schreiben welches Dateien in einem Zip-Ordner archiviert.

Code: Alles auswählen

#!/usr/bin/python
# Filename: Zip.py

import os
import zipfile
import time


source = input('Enter directory of the file you want to archive:')

target_dir = 'I:\\TestBackup' 

today = target_dir + os.sep + time.strftime('%Y%m%d')

now = time.strftime('%H%M%S')

comment = input('Enter a comment --> ')
if len(comment) == 0: 
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' + \
        comment.replace(' ', '_') + '.zip'

if not os.path.exists(today):
    os.mkdir(today) # make directory
    print('Successfully created directory', today)

myZip=zipfile.ZipFile(target, mode='a')
myZip.write(source, arcname=None)
myZip.close()              
 
Das Problem das Auftritt sieht wie folgt aus: Wenn ich ganze Ordner als source auswähle, wird lediglich der leere Ordner im Zip-Format archiviert, jedoch nicht dessen Inhalt. Wenn ich sepzifische Dateien auswähle funktioniert es jedoch.
Die Lösung ist wahrscheinlich banal, aber da ich leider keine Lösung finde, ist die Frage hoffentlich berechtig.

Vielen Dank für eure Hilfe!

Liebe Grüße,
Thison
lunar

@Thison Nun, ganz offensichtlich musst Du alle Unterverzeichnisse und die darin enthaltenen Dateien selbst explizit dem Archiv hinzufügen. Verwende "os.walk()", um über das zu archivierende Verzeichnis zu iterieren, und rufe dabei für jede zu archivierende Datei ".write()" auf. Für Dateien in Unterverzeichnissen musst Du dabei einen korrekten Namen selbst erzeugen, "arcname" darf also nicht "None" sein.

".write()" fügt dem Archiv keine Verzeichnisse hinzu, sondern erstellt neue Einträge im ZIP-Archiv. Ein Eintrag entspricht dabei einer Datei. Verzeichnisse kennt ZIP nicht, sie ergeben sich implizit aus den Namen der Einträge (ein Eintrag "spam/with/eggs" bezieht sich auf eine Datei "eggs" im Verzeichnis "with" im Verzeichnis "spam"). Du musst alle gewünschten Einträge selbst erstellen, mit richtigen Namen, wenn Du die Verzeichnisstruktur erhalten willst.

Falls sich das für Dich zu kompliziert anhört, dann verwende lieber ein fertiges Backup-Programm, und suche Dir erst einmal einfachere Aufgaben. Grundsätzlich sind Backups ein ziemlich komplexes Thema.
Antworten