2014-03-05 6 views
27

Ich benutze os.listdir und es funktioniert gut, aber ich bekomme Unterverzeichnisse in der Liste auch, was ist nicht was ich will: Ich brauche nur Dateien.Python - wie Dateien zu finden und Verzeichnisse in os.listdir

Welche Funktion muss ich dafür verwenden?

Ich schaute auch auf os.walk und es scheint, was ich will, aber ich bin mir nicht sicher, wie es funktioniert.

Antwort

31

Sie müssen Verzeichnisse ausfiltern; os.listdir() listet alle Namen in einem bestimmten Pfad auf. Sie können os.path.isdir() für diesen Einsatz:

basepath = '/path/to/directory' 
for fname in os.listdir(basepath): 
    path = os.path.join(basepath, fname) 
    if os.path.isdir(path): 
     # skip directories 
     continue 

os.walk() die gleiche Arbeit unter der Haube tut; Wenn Sie keine Unterverzeichnisse wiederherstellen müssen, müssen Sie os.walk() hier nicht verwenden.

+2

Genau das, was ich suchte. Mehr Wissen mit Beispiel. Ich muss eine Antwort wählen, aber alle drei zusätzlichen Konzepte, die ich versuchen werde zu erforschen. – Bartee

4
for fname in os.listdir('.'): 
    if os.path.isdir(fname): 
     pass # do your stuff here for directory 
    else: 
     pass # do your stuff here for regular file 
+3

Ich glaube, du meintest 'os.path', nicht' of.path'. –

+0

Der Kommentar mit dem Hinweis "Mach deine Sachen hier" sollte nicht innerhalb des if-Blocks sein. –

+0

Hinzugefügt else Zweig – nagylzs

13

Hier ist ein netter kleiner Einzeiler in Form einer Liste Verständnis:

[f for f in os.listdir(your_directory) if os.path.isfile(os.path.join(your_directory, f))] 

Dies wird return ein list von Dateinamen innerhalb der angegebenen your_directory.

+2

Alternative: 'filter (os.path.isfile, os.listdir (ihr_verzeichnis))' –

+4

Dies funktioniert nicht wirklich, da 'f' ist ein Dateiname, nicht ein vollständiger Pfad. Sie würden 'os.path.isfile (os.path.join (Ihr_Verzeichnis, f))' dort benötigen. –

7
import os 
filter(os.path.isfile, os.listdir(os.curdir)) 

os.curdir ist das aktuelle Verzeichnis