Seite 1 von 1

walk

Verfasst: Sonntag 22. Juni 2003, 23:19
von ertlpott
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

os.path.walk

Verfasst: Sonntag 22. Juni 2003, 23:30
von alpha
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

Verfasst: Montag 23. Juni 2003, 15:14
von rAiNm4n
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

re

Verfasst: Dienstag 24. Juni 2003, 19:29
von ertlpott
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

Re: re

Verfasst: Dienstag 24. Juni 2003, 19:40
von rAiNm4n
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

re

Verfasst: Mittwoch 25. Juni 2003, 14:45
von ertlpott
ok danke.
ich glaube ich habs kapiert :wink:

cya

ertlpott