Seite 1 von 1

Klasse und Variablen

Verfasst: Montag 20. Februar 2006, 17:10
von Taranis
Hallo allerseits,
nachdem Ihr mir beim letzten Mal http://www.python-forum.de/viewtopic.ph ... highlight= so toll geholfen habt und Ich mich entschlossen habe Python zu lernen, traue ich mich nun eine weitere Frage zu stellen :) :
Bezogen auf mein erstes Beispiel, möchte ich gerne alle Dateien, die mittels der Zip-Klasse archiviert werden in eine Reportdatei schreiben.

Code: Alles auswählen

def make_zip(self, outfilename, zip_dir):
    Zip = zipfile.ZipFile(outfilename)
    for dirname,dirs,filenames in os.walk(zip_dir):
      for filename in filenames:
        Zip.write(os.path.join(dirname,filename))
    Zip.close() 
Meine Frage:
Die Dateien laufen hier durch:
Zip.write(os.path.join(dirname,filename))

Wie bringe Ich diese Ausgabe in eine Variable, so dass Ich diese Variable in einer Reportfunktion (die sich in einer Klasse befindet) weiter verarbeiten kann?

Ich hoffe ich konnte mich einigermassen verständlich ausdrücken ...

Danke
Taranis

Verfasst: Montag 20. Februar 2006, 17:32
von Python 47
Wenn ich das richtig verstanden habe, dann könnte man das machen:

Code: Alles auswählen

x=Make_zip
Nachdem die Funtktion beendet wurde!

Verfasst: Montag 20. Februar 2006, 17:46
von Taranis
Hallo PM 47,
Sorry aber als Anfängerin tue Ich mir noch etwas schwer.
Kannst du mir deine Antwort etwas deutlicher machen.

Danke Taranis

Verfasst: Montag 20. Februar 2006, 18:18
von modelnine
Probier mal sowas:

Code: Alles auswählen

def make_zip_list(self, outfilename, zip_dir):
    files = []
    Zip = zipfile.ZipFile(outfilename)
    for dirname,dirs,filenames in os.walk(zip_dir):
      for filename in filenames:
        files.append(os.path.join(dirname,filename))
        Zip.write(files[-1])
    Zip.close()
    return files

print make_zip_list(<blah>)
Wobei blah natürlich durch korrekte Argumente zu ersetzen ist. Wenn Du die Liste von Dateien sofort und unmittelbar brauchst kannst Du natürlich auch sowas machen:

Code: Alles auswählen

def make_zip_iter(self, outfilename, zip_dir):
    Zip = zipfile.ZipFile(outfilename)
    for dirname,dirs,filenames in os.walk(zip_dir):
      for filename in filenames:
        curfile = os.path.join(dirname,filename)
        Zip.write(curfile)
        yield curfile
    Zip.close()
Das ganze ist als Iterator zu gebrauchen, also:

Code: Alles auswählen

for f in make_zip_iter(<blah>):
    print "Ich habe gerade %s zum Archiv dazugepackt." % f
Wobei Du sicherstellen mußt dass der Iterator bis zum Ende durchläuft, sonst kommen nicht alle Dateien ins Archiv.

HTH!

Re: Klasse und Variablen

Verfasst: Montag 20. Februar 2006, 18:19
von Python 47
Hallo,

natürlich mach ich das, ich weiß aber nicht ob es das ist, was du willst:

Code: Alles auswählen

def make_zip(self, outfilename, zip_dir):
    Zip = zipfile.ZipFile(outfilename)
    for dirname,dirs,filenames in os.walk(zip_dir):
      for filename in filenames:
        Zip.write(os.path.join(dirname,filename))
    Zip.close() 

x=make_zip(self, outfilename, zip_dir)
Dann hast du die funktion mit ihren eigenschaften in einer Variablen gespeichert!ISt das das was du wolltest? :?

Verfasst: Montag 20. Februar 2006, 18:55
von Taranis
Danke PM 47,
Um die Eigenschaften ging es mir nicht. Wenn ich einen Report erstellen möchte, dann geht es mir um die Dateien, die durch die besagte Zeile in der Zip-Funktion laufen.

@ modelnine
Ich schau mir dein Beispiel mal an. Ich denke das kommt hin.

Danke