walk

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
ertlpott
User
Beiträge: 44
Registriert: Montag 14. April 2003, 16:05

Es gibt ja mehrere Funktionen in Python, wo ich meines Achtens wahrscheinlich noch viel Übung benötigen werde, um sie zu beherrschen. Aber bisher habe ich noch kein Werkzeug gesehen, wo mir die dahinterstehende Logik dermaßen schleierhaft erschienen ist wie bei
os.path.walk

ich habe eine Funktion, die mir jede Datei und jedes Veichnis mit Name und Größe in einem bestimmten Pfad darstellt.
Nun möchte ich diese Funktion auf jedes Verzeichnis, (wie es in meinem Buch so schön heißt) unterhalb des angegebenen Verzeichnises, anwenden.

Die Funktion hat ein Argument, und zwar path
etwa so:

Code: Alles auswählen

import os, stat

def dirbeschr(dir):
	liste = os.listdir(dir)
	for file in liste:
		if os.isfile(file):
			print "Datei: %s\t Größe: %i" %(file,os.stat(file)[stat.ST_SIZE])
		# und so weiter, je nach dem ob ein Verzeichnis oder eine Datei vorliegt
Wäre echt super, wenn mir jemand die erforderliche Walk-Anweisung schreiben kann, und sie mir wenn möglich auch erklärt.

Oder ist die Funktion "dirbeschr" ohnehin nicht "walk-gerecht"? :wink:

Bedanke mich Schon einmal im Voraus

bis die Tage

Simon
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Hallo ertlpott,

ich habe die os.path.walk Funktion auch schon benutzt.
Wenn ich es noch recht weiß, dann ist die Syntax

os.path.walk(x,y,z)

wobei
x Dein Startpfad ist, auf den die Funktion "dirbeschr" angewandt werden soll.
y = dirbeschr, also die Funktion die aufgerufen werden soll
z = Extension (bei dir dann wohl *)

Deine Funktion selbst habe ich nicht auf Tauglichkeit geprüft.

Gruß
Alpha
rAiNm4n
User
Beiträge: 19
Registriert: Mittwoch 4. Juni 2003, 11:30
Wohnort: Berlin

Hallo,
die genaue Syntax von os.path.walk ist:
walk(path, visit, arg)
Die Funktion tut nichts anderes, als für jeden Unterordner im Pfad path die Funktion visit aufzurufen, und zwar mit den Argumenten: arg, dirname, names. arg musst du selber an walk übergeben (s.o.), d.h., wenn du es nicht brauchst, einfach einen leeren String. dirname ist der Name des aktuellen Ordners und names ist eine Liste der Dateien und Ordner im aktuellen Verzeichnis.

Zu deiner Frage:
die Funktione dirbeschr ist - jedenfalls so, wie sie da steht - nicht "walk-gerecht". Zum einen stecken noch ein paar Fehler darin und zum anderen muss die drei Argumente entgegennehmen (s.o.).
Ich habe die Funktion mal "walk.gerecht" gemacht: :wink:

Code: Alles auswählen

def dirbeschr(arg, dir, liste): #1
    for file in liste: #2
        if os.path.isfile(os.path.join(dir, file)): #3
	    print "Datei: %s\t Groesse: %i" %(os.path.join(dir, file),  os.stat(os.path.join(dir, file))[stat.ST_SIZE]) #4

>>> os.path.walk("C:\\irgend\\was", dirbeschr, "")
1. Die Funktionsparameter wie oben angepasst
2. Das liste = os.listdie(dir) kannst du dir jetzt sparen, weil die liste schon übergeben wird
3. a) Die Funktion isfile ist im Modul os.path, nich im Modul os! b) Um den vollständigen Pfad der Datei oder des Ordners zu ermitteln (und genau den verlangt os.path.isfile auch) musst du mittels os.path.join das aktuelle Verzeichnis und die aktuelle Datei zusammenfügen.
4. s. 3b

Ich hoffe, ich konnte dir helfen!

cu
Chris
ertlpott
User
Beiträge: 44
Registriert: Montag 14. April 2003, 16:05

Also dass heißt, dass die Funktion Walk immer die selben drei Argumente an die drinen angegebene Funktion in der selben schon vordefinierten Reihenfolge abgibt?
Heißt dass auch, ich kann dann nur ein optionelles Argument an die Funktion Walk abgeben?
Verändert sich das Argument "dir" dann auch, wenn Walk tiefer in Unterverzeichnisse vordringt?

Danke schon einmal, langsam gehts mir ein.

cu

Simon
rAiNm4n
User
Beiträge: 19
Registriert: Mittwoch 4. Juni 2003, 11:30
Wohnort: Berlin

ertlpott hat geschrieben:Also dass heißt, dass die Funktion Walk immer die selben drei Argumente an die drinen angegebene Funktion in der selben schon vordefinierten Reihenfolge abgibt?
Jepp
Heißt dass auch, ich kann dann nur ein optionelles Argument an die Funktion Walk abgeben?
Ja, du kannst natürlich mehr Informationen reinpacken, wenn du es als Liste oder Dictionary übergibst.
Verändert sich das Argument "dir" dann auch, wenn Walk tiefer in Unterverzeichnisse vordringt?
Ja, dir gibt immer das aktuelle Verzeichnis an.

cu
Chris
bombing for freedom is like fucking for virginity
ertlpott
User
Beiträge: 44
Registriert: Montag 14. April 2003, 16:05

ok danke.
ich glaube ich habs kapiert :wink:

cya

ertlpott
Antworten