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 :shock: Und da schlage ich mich immer mit os.path.walk() rum :evil:

EDIT: Zurecht... os.walk() gibt's erst ab Python v2.3 :( Auf dem Server ist aber leider nur Python v2.2.1 :evil: