Anzahl von Dateien in einem Verzeichnis

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
soma
User
Beiträge: 7
Registriert: Montag 23. Januar 2006, 08:42

Hi Hi ich suche nach einer Möglichkeit die Anzahl der Dateien in einem Verzeichnis zu ermitteln.
Mit os.walk() funktioniert es auch jedoch sehr langsam.
ich benötige eine funktion die in etwa so schnell wie Eigenschaften eines Verzeichnisses unter Windows ist.
ich hoffe jemand hat einen rat

mfg soma
Gromit
User
Beiträge: 51
Registriert: Montag 8. Mai 2006, 19:07

Hilft das?

Code: Alles auswählen

>>> len( os.listdir( "." ) )
259
Ist halt nicht rekursiv.

HTH,
Gerald
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Gromit hat geschrieben:

Code: Alles auswählen

>>> len( os.listdir( "." ) )
259
... os.listdir() listet leider auch Unterverzeichnisse mit auf.

Man müsste die Elemente der Liste noch auf os.path.isfile() prüfen.

Sowas in der Art z.B:

Code: Alles auswählen

>>> directory = r'd:\work'
>>> os.listdir(directory)
['demo.txt', 'Masaru.gif', 'Python']
>>> 
>>> files = [ elem for elem in os.listdir(directory) if os.path.isfile(os.path.join(directory, elem)) ]
>>> files
['demo.txt', 'Masaru.gif']
>>> len(files)
2
Ob aber auch das nun "schnell" genug (oder mindestens schneller als os.walk()) ist, müsstest man mal für sich austesten.

Habe ein wenig rumprobiert und bin bei meiner WinXP Machine auf das Phänomen gestoßen, dass os.walk und die os.listdir List Comprehension annährend gleich schnell sind ... jedoch os.walk "manchmal" doppelt so lange braucht.

Ich würde deswegen vielleicht die os.listdir Variante vorziehen.

Tip.: Anstelle von "." (aktuelles Arbeitsverzeichnis) kann man mit Python geschickter auch die Platformübergreifende 'os.getcwd()' Methode verwenden.

>>Masa<<
Antworten