2016-07-04 5 views
1

Ich habe eine Reihe von Dateien zu sortieren.So erstellen Sie eine Liste von Dateien im Verzeichnis in Python

Ich versuche, eine Liste der Namen von nur Dateien (oder nur Ordner) im Verzeichnis zu bekommen.

path = 'C:\\test\\' 
items = os.listdir(path) #this gives me a list of both files and folders in dir 

for name in items: 
    if os.path.isfile(path + '\\' + name) == True: 
     items.remove(name) 

Ich erwartete, dass items von Ordnern Namen bestehen würde. Aber es hat auch die Hälfte der Dateinamen.

Wenn ich jedoch print(name) anstelle von items.remove(name) verwende, druckt es korrekt.

Antwort

5

Ich würde vermuten, dass dies daran liegt, dass Sie die Liste "Elemente" ändern, während Sie darüber iterieren. Es ist nie eine gute Idee, dies zu tun. Und dies könnte dazu führen, dass bestimmte Elemente übersprungen werden. Deshalb werden nicht alle Dateien entfernt. Führen Sie anstelle der for-Schleife einen der folgenden Schritte aus:

items = [item for item in items if isfile(join(path, item))] 

Die Join-Funktion befindet sich in os.path. Und Sie sollten das verwenden, anstatt die umgekehrten Schrägstriche selbst hinzuzufügen.

2

I os.path.isdir() in einer Liste Verständnis, wie so verwenden würde:

Für Ordner:

items = [f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))] 

Für Dateien:

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

Dies baut die ganze Liste von Ordnern oder Dateien vor beginnt Gegenstände zu entfernen.

Verwandte Themen