Benutzung von ZipFile
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.
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 =/.
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
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 =/.
- 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
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.
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