Benutzung von ZipFile

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
Seeker
User
Beiträge: 70
Registriert: Mittwoch 16. September 2009, 19:52

Achso, ich dachte, dass es einfach auf die Reihenfolge drauf an kommt, d.h. die Strings wirklich nur aneinandergehängt werden... aber jetzt ises klar, danke =).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auf das Problem mit dem Ordner hatte ich bereits ganz am Anfang hingewiesen ;-)
Seeker
User
Beiträge: 70
Registriert: Mittwoch 16. September 2009, 19:52

Also... ich habe heute weiter am Programm rumgetüftelt. Gestern Abend war es ja in der Lage, einen neuen Zipordner zu erstellen.
Nach einem langen Tag habe ich es nun endlich geschafft (kein Kommentar...), dass er alle Dateien aus einem Ordner nimmt, richtig umbenennt und im Zipordner speichert.

Code: Alles auswählen

# Filename: backup_ver1b.py

import os
import time
import zipfile

source = [r'C:\Users\mewett\Desktop\random']
target_dir = r'D:\backup'
target = os.path.join(target_dir, "%s.zip" % time.strftime('%Y%m%d%H%M%S'))
print "Source:", source
print "Target:", target

path=r'C:\Users\mewett\Desktop\random'
dirList=os.listdir(path)
z = zipfile.ZipFile(target, "w", zipfile.ZIP_STORED, allowZip64=False)
for i in dirList:
    fpath = r"C:\Users\mewett\Desktop\random"+"\\"+i
    print fpath
    z.write(fpath,i)
    print "Backup for %s successful" %i
Mein Hauptproblem war es, hinzukriegen, dass in z.write() einerseits zuerst der ganze Pfad eingeschleust wird, danach aber nur Dateiname.Endung. Nach vielen Versuchen mit dirList und os.path.walk habe ich keine andere Lösung als " "+ " " Patchwork gefunden...
Kann man dies auch mit os.path.join erreichen (Zeile 17)? Bei mir hat er dann nämlich jeweils nur den Dateinamen (nicht den ganzen Pfad) ausgespuckt =/.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dann hast Du wohl etwas falsch gemacht:

Code: Alles auswählen

In [1]: import os.path

In [2]: import os

In [3]: dir = os.listdir(".")

In [4]: dir
Out[4]:
['easy_install-2.6-script.py',
 'easy_install-2.6.exe',
 'easy_install-script.py',
 'easy_install.exe',
 'ipcluster-script.py',
 'ipcluster.exe',
 'ipcontroller-script.py',
 'ipcontroller.exe',
 'ipengine-script.py',
 'ipengine.exe',
 'iptest-script.py',
 'iptest.exe',
 'ipython-script.py',
 'ipython.exe',
 'ipythonx-script.py',
 'ipythonx.exe',
 'pycolor-script.py',
 'pycolor.exe']

In [5]: for element in dir:
   ...:     print os.path.join(r"C:\\Users\mewett\Desktop\random", element)
   ...:
   ...:
C:\\Users\mewett\Desktop\random\easy_install-2.6-script.py
C:\\Users\mewett\Desktop\random\easy_install-2.6.exe
C:\\Users\mewett\Desktop\random\easy_install-script.py
C:\\Users\mewett\Desktop\random\easy_install.exe
C:\\Users\mewett\Desktop\random\ipcluster-script.py
C:\\Users\mewett\Desktop\random\ipcluster.exe
C:\\Users\mewett\Desktop\random\ipcontroller-script.py
C:\\Users\mewett\Desktop\random\ipcontroller.exe
C:\\Users\mewett\Desktop\random\ipengine-script.py
C:\\Users\mewett\Desktop\random\ipengine.exe
C:\\Users\mewett\Desktop\random\iptest-script.py
C:\\Users\mewett\Desktop\random\iptest.exe
C:\\Users\mewett\Desktop\random\ipython-script.py
C:\\Users\mewett\Desktop\random\ipython.exe
C:\\Users\mewett\Desktop\random\ipythonx-script.py
C:\\Users\mewett\Desktop\random\ipythonx.exe
C:\\Users\mewett\Desktop\random\pycolor-script.py
C:\\Users\mewett\Desktop\random\pycolor.exe
Seeker
User
Beiträge: 70
Registriert: Mittwoch 16. September 2009, 19:52

Super, danke für die schnelle Antwort =). Der Fehler war, dass ich "C:\....\random\", i eingegeben hatte, um einen \ drinzuhaben (was nicht akzeptiert wurde). Daraufhin habe ich es mit "C:\...\random",r"\",i) versucht, ging auch nicht.
Ich hatte übersehen, dass er die \ ja automatisch einfügt, und ihn ein zusätzlicher \ deshalb wohl verwirrt.

*Edit*:
letztes Update:
Ich habe den Code ein wenig verbessert. Man kann nun mehrere Ordnerpfade eingeben. Diese Version hier komprimiert auch noch das ganze. Es braucht länger, aber das End-Zipfile ist doch bedeutend kleiner.
Dazu, ähnlich wie im Script beschrieben, entsteht jeweils ein Ordner mit dem Datum (falls er noch nicht exisitiert) und der Zipordner zeigt dann die Zeit des Backups an.

Code: Alles auswählen

import os
import time
import zipfile
import zlib

source = [r'C:\Users\mewett\Desktop\random', r'C:\Users\mewett\Desktop\Schule Buchhaltung']
target_dir = r'D:\backup'
print "Source:", source

today = os.path.join(target_dir,time.strftime('%Y-%m-%d'))

target = os.path.join(today, "%s.zip" % time.strftime('%Hh%M'))
print "Target:", target

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

z = zipfile.ZipFile(target, "w", zipfile.ZIP_DEFLATED, allowZip64=False)

for item in source:
    path=item
    dirList=os.listdir(path)
    for i in dirList:
        fpath = os.path.join(path, i)
        print fpath
        z.write(fpath,i)
        print "Backup for %s successful" %i
Antworten