Zip Files ?

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
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Folgendes script führt bei mir zu keinem Ergebnis?

Code: Alles auswählen

import zipfile
import os,stat, sys, arcpy
from cStringIO import StringIO
def createZip(path):
    def walktree (top = ".", depthfirst = True):
        names = os.listdir(top)
        if not depthfirst:
            yield top, names
        for name in names:
            try:                
                st = os.lstat(os.path.join(top, name))
            except os.error:
                continue
            if stat.S_ISDIR(st.st_mode):
                for (newtop, children) in walktree (os.path.join(top, name),
                    depthfirst):
                        yield newtop, children
        if depthfirst:
            yield top, names
    list=[]
    for (basepath, children) in walktree(path,False):
        for child in children:
            f=os.path.join(basepath,child)
            if os.path.isfile(f):
                f = f.encode(sys.getfilesystemencoding())
                list.append( f )
    f=StringIO()
    file = zipfile.ZipFile(f, "w")
    for fname in list:
        nfname=os.path.join(os.path.basename(path),fname[len(path)+1:])
        file.write(fname, nfname , zipfile.ZIP_DEFLATED)
    file.close()
    f.seek(0)
    return f

path = r"R:\Karto\Bierer2015\Webkarten"
outZipFile = r"R:\Karto\Bierer2015\Datenbank_RP"

createZip(path)
Warum?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und das heißt? Was erwartest du denn, und was passiert? Gibt es eine Fehlermeldung? Fackelt dein Rechner ab? Bellt dein Hund? Etwas mehr Information musst du schon liefern.
Das Leben ist wie ein Tennisball.
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Dachte es gibt ein Zipfile ?
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Keine Fehlermeldung, kein abbrennen, kein nichts. Gähnendes Schweigen vom PC?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Liegt daran das du die Datei nirgends schreibst. Du verwendest `outZipFile` auch garnicht.
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

outZipFile ist von einem früheren Versuch, wird nicht verwendet.

Dachte ich schreibe den Ordnerinhalt von Path ab Zeile 27?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ja das tust du in ein StringIO ein file like object im RAM.
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Und wie wird daraus eine echte gezippte Datei?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Indem du das Python-Tutorial aus der Dokumentation durcharbeitest, den Abschnitt über Dateioperationen verstehst und dir *nicht* deinen Code wild aus dem Internet kopierst und zusammenklebst.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

JoB hat geschrieben:Und wie wird daraus eine echte gezippte Datei?
Zur Ergänzung zu EyDu's Tipps: StringIO wandelt man nicht einfach in eine Datei um, man tauscht die Funktionen aus.

Wenn du allerdings wirklich noch nicht das Python Tutorial durchgearbeitet hast (nicht nur lesen) dann solltest du das unbedingt tun. Es ist nicht lang und vermittelt sehr viel.

https://docs.python.org/2/library/functions.html#open
https://docs.python.org/2/library/stringio.html
BlackJack

@JoB: Warum `walktree()` definieren und nicht `os.walk()` verwenden? Und `os.lstat()` und `stat.S_ISDIR()` statt `os.path.isdir()`?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@BlackJack: Weil der Code einfach von hier kopiert wurde. Da wurde das halt alles nicht benutzt ;-)
Das Leben ist wie ein Tennisball.
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

@EyDu:
Ist nicht wild kopiert, nur aus einer von dir gefundenen Quelle geklaut :-)
Danke für die hilfreichen Kommentare ...
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

So neu geklaut - führt zu folgender Fehlermeldung:
WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden: 'Pflegekataster2013.shp'
Datei existiert aber ???

Code: Alles auswählen

import zipfile
import os,stat, sys, arcpy

path = r"R:\Karto\Bierer2015\Webkarten"
NewPath = r"C:\temp2"

for root, dirs, files in os.walk(path):
    for f in files:
        fname = os.path.join(root, f)
        new_path = os.path.normpath(fname.replace(NewPath, ''))
        # zipfile.ZipFile(fname, 'w' , zipfile.ZIP_DEFLATED)
        with zipfile.ZipFile(fname, 'w') as myzip:
            myzip.write(f)
BlackJack

@JoB: Existiert die im aktuellen Arbeitsverzeichnis oder vielleicht doch eher irgendwo unter ``R:\Karto\Bierer2015\Webkarten``!? Und die nächste Frage ist dann ob Du die Datei da nicht gerade durch die ZIP-Datei überschrieben hast.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich frage mich ja eher, wieso man etwas mit Python macht, wenn man es gar nicht lernen will... da würde ich Batch-Vorgänge eben mit einer Shell lösen :K
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Ja richtig liegt in einem Ordner unterhalb, aber auch dann passiert nichts (vollständiger Pfad angegeben), Daten auch nicht überschrieben?
JoB
User
Beiträge: 25
Registriert: Mittwoch 14. Januar 2015, 13:01

Lerne doch gerade zippen, nur finde keine Spielpartner :roll:
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Hmmm... schreib doch mal hinter jede Zeile was du denkst was sie tut.
Da sind schlicht alle Grundlagen falsch, die kann man auch schwerlich herbei erklären.

Schnapp dir Tutorial und leg los.
Antworten