zip file erstsellen

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
ede
User
Beiträge: 20
Registriert: Samstag 18. November 2006, 10:38

also ich bin noch ein relativer newb in python und arbeite deshalb auch ein tutorial durch wo ich bei einer aufgabe, in der mehrere Dateien und Ordner zu einem zip file zusammengefügt werden sollen, nicht mehr weiterkomme.
(http://abop-german.berlios.de/read/the- ... st-version)
ich benutze windows und hab auch den kommentar beachtet
# Windows-Benutzer koennen z.B. PKZIP oder Info-ZIP in das
# Windows-Systemverzeichnis kopieren, damit dies funktioniert.
habs mit verschiedenen files von http://www.info-zip.org ausprobiert, klappt aber nich... warum?

hier noch der code:

Code: Alles auswählen

import os
import time

quellen = [...(bei mir c:\python25)]

ziel_verzeichnis = (bei mir d:\

# 4. Der Name der ZIP-Datei setzt sich aus dem aktuellen Datum
# und der Uhrzeit wie folgt zusammen:
ziel = ziel_verzeichnis + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Wir benutzen den Befehl zip (unter Unix/Linux), um die Dateien
# zu einem ZIP-Archiv zu komprimieren:
zip_befehl = 'zip -qr %s %s' % (ziel, ' '.join(quellen))
# Windows-Benutzer koennen z.B. PKZIP oder Info-ZIP in das
# Windows-Systemverzeichnis kopieren, damit dies funktioniert.

# Sicherung starten
if os.system(zip_befehl) == 0:
	print 'Erfolgreiche Sicherung nach', ziel
else:
	print 'Sicherung fehlgeschlagen!'
das komische ist aber das immer erfolgreiche sicherung als meldung kommt, das .zip-file jedoch nicht existiert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

ede hat geschrieben:mehrere Dateien und Ordner zu einem zip file zusammengefügt
Hi ede!

Willkommen im Python-Forum!

Unabhängig zu deinem Problem, möchte ich dich darauf aufmerksam machen, dass Python auch ohne externe Programme Dateien in ein Archiv komprimieren kann.

Dafür sind die Module
- tarfile: http://docs.python.org/lib/module-tarfile.html
und
- zipfile: http://docs.python.org/lib/module-zipfile.html
zuständig.

Kompression allgem. --> http://docs.python.org/lib/archiving.html

Hier auch ein Beispiel, wie es mit dem Modul ``tarfile`` funktioniert: http://www.python-forum.de/post-40774.html#40774

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ein Zip das sicher funktioniert: http://gnuwin32.sourceforge.net/packages/zip.htm
Download: http://gnuwin32.sourceforge.net/downlinks/zip.php

Anleitung für ``unzip`` (nicht ``zip``): http://gelb.bcom.at/trac/misc/wiki/Tuto ... stallieren

Diese Anleitung ist zwar für ``unzip``, aber der Hinweis mit dem Pfad ist schon nicht so schlecht -- auch nicht für ``zip``.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Samstag 18. November 2006, 16:32, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ede
User
Beiträge: 20
Registriert: Samstag 18. November 2006, 10:38

okay vielen dank jetzt klappts schon viel besser :D
Robin21
User
Beiträge: 5
Registriert: Freitag 13. April 2007, 16:46

Hallo,
hab jetzt mal den alten Thread rausgekramt, weil meine Frage eigentlich fast die gleiche ist wie die des Threaderstellers und ich deshalb keinen neuen Thread aufmachen wollte.
Bin jetzt nämlich auch bei dieser Stelle im Tutorial und es klappt einfach nicht.
Hab auch schon PKZIP installiert, dieses GnuWin und hab auch des mit dem Pfad gemacht hat aber irgendwie nichts genützt. Muss ich dann vielleicht zusätzlich noch was im Quelltext verändern? Versteh auch net ganz diese Aussage vom Tutorial-Ersteller:
"PKZIP oder Info-ZIP in das
Windows-Systemverzeichnis kopieren, damit dies funktioniert". Meint er damit installieren, oder was?
Weiß jemand wies da ne einfache Lösung gibt, die wenn möglich auch zum Tutorial passt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Robin21 hat geschrieben:Bin jetzt nämlich auch bei dieser Stelle im Tutorial und es klappt einfach nicht.
Hab auch schon PKZIP installiert, dieses GnuWin und hab auch des mit dem Pfad gemacht hat aber irgendwie nichts genützt. Muss ich dann vielleicht zusätzlich noch was im Quelltext verändern?
Nein. Aber eine Fehlermeldung wäre ungemein hilfreich. Wenn du eine solche Nachlieferst, wird es viel einfacher dir zu helfen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Robin21
User
Beiträge: 5
Registriert: Freitag 13. April 2007, 16:46

Naja, ne große Fehlermeldung kommt ja net, bei der Ausgabe kommt eben der Text "Sicherung fehlgeschlagen" und im Zielordner für die ZIP-Dateien passiert eben auch nix, d.h. er erstellt keine.
Hier noch der Code:

Code: Alles auswählen

				
#!/usr/bin/python

import os
import time


# 1. Die Dateien und Verzeichnisse, die gesichert werden sollen,
# werden in der folgenden Liste angegeben:
quellen = ['D:\\Dokumente\\Testordner-für-Python\\DieQuelle1.txt', 'D:\\Dokumente\\Testordner-für-Python\\DieQuelle2.txt']
# Unter Windows muessen Sie die Pfade auf diese Weise angeben:
# quellen = ['C:\\Dokumente', 'D:\\Arbeit']

# 2. Die Sicherung muss in das folgende Hauptverzeichnis fuer
# Sicherungen gespeichert werden:
ziel_verzeichnis = 'D:\\Dokumente\\Testordner-für-Python\\Der-Zielordner\\'
# Denken Sie daran, dies an Ihre Gegebenheiten anzupassen.

# 3. Die Dateien werden in einer ZIP-Datei gesichert.

# 4. Der Name der ZIP-Datei setzt sich aus dem aktuellen Datum
# und der Uhrzeit wie folgt zusammen:
ziel = ziel_verzeichnis + time.strftime('%Y%m%d%H%M%S')+".zip"

# 5. Wir benutzen den Befehl zip (unter Unix/Linux), um die Dateien
# zu einem ZIP-Archiv zu komprimieren:
zip_befehl = 'zip -qr %s %s' % (ziel, ' '.join(quellen))
# Windows-Benutzer koennen z.B. PKZIP oder Info-ZIP in das
# Windows-Systemverzeichnis kopieren, damit dies funktioniert.
# Sicherung starten
if os.system(zip_befehl) == 0:
	print 'Erfolgreiche Sicherung nach', ziel
else:
	print 'Sicherung fehlgeschlagen!'
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das ist mitunter ein Grund, warum die Python-eigenen Module zu bevorzugen sind. So musst du nicht den Rückgabewert auswerten, um eine sinnvolle Fehlerbeschreibung zu bekommen - die Exceptions sind meist eine ausreichend gute Hilfe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Robin21 hat geschrieben:

Code: Alles auswählen

quellen = ['D:\\Dokumente\\Testordner-für-Python\\DieQuelle1.txt', 'D:\\Dokumente\\Testordner-für-Python\\DieQuelle2.txt']
[...]
# 5. Wir benutzen den Befehl zip (unter Unix/Linux), um die Dateien
# zu einem ZIP-Archiv zu komprimieren:
zip_befehl = 'zip -qr %s %s' % (ziel, ' '.join(quellen))
Du arbeitest unter Windows, rufst aber den Befehl für Unix auf?

Versuchs mal mit "pkzip /r %s %s"... Hilfe bekommst du evtl., wenn du in der Eingabeaufforderung (cmd.exe) "pkzip /?" eingibst.
Robin21
User
Beiträge: 5
Registriert: Freitag 13. April 2007, 16:46

Danke erstmal für die Antwort.
Der andere Befehl hat leider auch nichts gebracht was wohl daran liegt das ich dieses PKZIP wieder deinstalliert hab, da es auch nichts gebracht hatte und außerdem eine Shareware-Version ist.
Weiß net was ich jetzt noch machen soll.
Bleiben wohl nur noch die Onboardmittel von Python übrig...
J.M.K.
User
Beiträge: 6
Registriert: Freitag 16. März 2007, 13:58

Hallo

Habe auch das gleiche Problem und komme nicht weiter.
Hier mal der Code:

Code: Alles auswählen

#!/usr/bin/python

import os
import time

quellen = ["D:\\Python", "D:\\Test"]
ziel_verzeichnis = "D:\\Sicherung"
ziel = ziel_verzeichnis + time.strftime("%Y%m%d%H%M%S") + ".zip"
zip_befehl = "pkzip /r %s %s" % (ziel, " ".join(quellen))
if os.system(zip_befehl) == 0:
    print "Erfolgreiche Sicherung nach", ziel
else:
    print "Sicherung fehlgeschlagen"
Ich habe mir das von gerold vorgestellte gnuwin32 programm heruntergeladen und in den Windows\System32 Ordner installiert.

Bei der Programmausführung in IDLE erhalte ich nur die Meldung:
Sicherung fehlgeschlagen

Die Konsole ist mir etwas freundlicher gesinnt und sagt:

D:\Python>sicherung.py
Der Befehl "pkzip" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Sicherung fehlgeschlagen

MfG J.M.K.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Benutzt doch einfach mal das Python-Modul, das soll doch genau solche Probleme verhindern.
J.M.K.
User
Beiträge: 6
Registriert: Freitag 16. März 2007, 13:58

Könnte mir vielleicht jemand zeigen, wie das mit der Verwendung des Moduls aussieht?
Habe mir die Erklärungen durchgelesen, aber es gibt doch noch einiges was ich nicht verstehe.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Und das wäre?
J.M.K.
User
Beiträge: 6
Registriert: Freitag 16. März 2007, 13:58

Nunja ich bin Neuling. Also bitte nicht so hart.
Ich schreibe hier jetzt einfach mal meine vorgehensweise.

Zuerst habe ich meinem Code die Zeile

Code: Alles auswählen

import zipfile
hinzugefügt, da ich ja das Modul zipfile verwenden will.

Soweit so gut.
Die einzigste Zeile die etwas mit dem erstellen der *.zip zu tun hat ist ja wohl:

Code: Alles auswählen

zip_befehl = "zip /r %s %s" % (ziel, " ".join(quellen))
d.h. für mich das ich diese Zeile irgendwie ersetzen muss.

Kurz auf der Website gestöbert entdecke ich:
class ZipFile
The class for reading and writing ZIP files. See ``ZipFile Objects'' (section 12.4.1) for constructor details.
Das klingt doch schon mal gut.

Schnell auf den Link klicken und zack geht es nur noch um eine bestimmte Klasse. Da Klassen erst in einem späteren Kapitel erklärt werden und ich von ihrer Verwendung noch keine Ahnung habe stehe ich vor einer Mauer. ;)
Deshalb habe ich um ein Verwendungsbeispiel gebeten.

MfG J.M.K.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Erster Treffer:
google("python zipfile sample")
;-)
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Eure ZIP Befehl funktioniert warscheinlich nicht, weil der Befehl pkzip nicht gefunden wird. Gebt den Ordner und Exenamen beim Befehl auch noch mit und es wird funktionieren.

bsp:
C:/Programme/7z/7z.exe *
für * müssen dann die Programmoperatoren mit.

Aber ich finde die Python Module praktikabler.
J.M.K.
User
Beiträge: 6
Registriert: Freitag 16. März 2007, 13:58

Danke für eure Hilfe.
Habe es jetzt mit dem Modul hinbekommen.
Antworten