Seite 1 von 1
os.path.walk(): Variable als ID hochzählen...
Verfasst: Sonntag 21. November 2004, 19:14
von jens
Möchte gern eine Variable hochzählen, immer +1 pro Verz und pro Datei...
Ist eigentlich nicht das Thema, aber wie Initialisiere ich die Variable?
Eine Lösung wäre
global zu benutzen
Bsp:
Code: Alles auswählen
ID=0
def GetData(arg, dirname, FileNameList):
global ID
ID += 1
for FileName in FileNameList:
ID += 1
os.path.walk( DiscPath, GetData, "")
Verfasst: Sonntag 21. November 2004, 19:27
von mawe
Hi!
So geht's auch:
Code: Alles auswählen
ID=0
def GetData(arg, dirname, FileNameList, id=ID):
print id # oder was auch immer :D
Gruß, mawe
Verfasst: Sonntag 21. November 2004, 19:51
von Dookie
Hi jens,
um Einträge in Verzeichnissen zu zählen würde ich mit os.walk() folgendes machen:
Code: Alles auswählen
def count_entries(dirname):
num = 0
for root, dirs, files in os.walk(dirname):
num += len(files)+len(dirs)
return num
Mit os.path.walk() könntest Du es so machen:
Code: Alles auswählen
def GetData(arg, dirname, FileNameList):
arg[0] += 1
arg[0] += len(FileNameList) # Einfacher als deine Forschleife
#for FileName in FileNameList:
# ID += 1
count = [0] # wichtig eine Liste ist mutable
os.path.walk( DiscPath, GetData, count)
print count[0]
Der Trick ist dabei eine Liste als Argument zu übergeben, der Inhalt einer Liste ist änderbar und so auch innerhalb der Funktion zu ändern.
count bzw. innerhalb der Funktion
arg ist quasi der Behälter für den Zähler.
Gruß
Dookie
Verfasst: Sonntag 21. November 2004, 20:20
von jens
mawe hat geschrieben:Code: Alles auswählen
ID=0
def GetData(arg, dirname, FileNameList, id=ID):
id += 1
print id # oder was auch immer :D
Das geht nicht, da ID ja hochgezählt werden soll (innerhalb von getData, deswegen hab ich "id += 1" ergänzt)... Geht aber nicht, weil id immer auf 1 bleibt... Ich denke weil id zwar um eins erhöht wird, aber nicht ID...
Die Version von Dookie geht allerding's... Generell finde ich die os.path.walk() Geschichte etwas merkürdig... Ist nicht so ganz Python-Like, oder???
Cool wäre sowas wie
Code: Alles auswählen
for Verz, DateiListe in os.path.walk("C:").interitems():
print Verz
for Datei in DateiListe:
print Datei
Verfasst: Sonntag 21. November 2004, 20:25
von mawe
Hi!
jens hat geschrieben:
Ich denke weil id zwar um eins erhöht wird, aber nicht ID
Stimmt. Wusste nicht, daß auch ID verändert werden soll.
Gruß, mawe
Verfasst: Sonntag 21. November 2004, 21:19
von Dookie
genau das geht ja mit os.walk()
Code: Alles auswählen
for Verz, VerzList, DateiListe in os.walk("C:\\"):
print Verz
for Datei in DateiListe:
print Datei
Gruß
Dookie
Verfasst: Sonntag 21. November 2004, 21:22
von jens
Dookie hat geschrieben:genau das geht ja mit os.walk()
Verdammt das kenne ich noch garnicht

Und da schlage ich mich immer mit os.path.walk() rum
EDIT: Zurecht... os.walk() gibt's erst ab Python v2.3

Auf dem Server ist aber leider nur Python v2.2.1
