Klasse und Variablen

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
Taranis
User
Beiträge: 27
Registriert: Freitag 6. Januar 2006, 18:05

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
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Wenn ich das richtig verstanden habe, dann könnte man das machen:

Code: Alles auswählen

x=Make_zip
Nachdem die Funtktion beendet wurde!
mfg

Thomas :-)
Taranis
User
Beiträge: 27
Registriert: Freitag 6. Januar 2006, 18:05

Hallo PM 47,
Sorry aber als Anfängerin tue Ich mir noch etwas schwer.
Kannst du mir deine Antwort etwas deutlicher machen.

Danke Taranis
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

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!
Zuletzt geändert von modelnine am Montag 20. Februar 2006, 18:46, insgesamt 1-mal geändert.
--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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? :?
mfg

Thomas :-)
Taranis
User
Beiträge: 27
Registriert: Freitag 6. Januar 2006, 18:05

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
Antworten