2016-04-07 5 views
0
filter(os.path.isfile,os.listdir('DIRECTORY')) 

Returns andere Ergebnisse als:Disagreement zwischen isfile und listdir in Python

os.listdir('DIRECTORY') 

In einem Verzeichnis von CSV-Dateien, der listdir Befehl eine Reihe von Dateien zurückgibt (wie erwartet), aber die Filter gibt nichts zurück (unerwartete)

+1

Wollen Sie die Liste von Verzeichnis sehen, und auch, wie der Filter implementiert wurde. – Hun

+0

Haben Sie das Verzeichnis der Datei vorangestellt? 'listdir (" \ Pfad \ zu \ Verzeichnis \ ") wird etwas zurückliefern wie' ["Datei1.txt", "Datei2.dat", ...] 'Sie müssen dann' Datei \ (\ Pfad \ zu \ dir \ file1.txt ")'. – Julien

Antwort

0
os.listdir(path) #will return all content of that folder 


filter(os.path.isfile, os.listdir(path)) # will return only list of files 
filter(os.path.isdir, os.listdir(path)) # will return only list of directories 
0

os.listdir() gibt eine Liste von Dateinamen, die tun nicht den Pfad enthalten. Das bedeutet os.listdir("/home/zondo") könnte ["dir1", "file1", "file2"] geben. Nehmen wir an, wir sind in dir1 bei der Ausführung dieses Befehls. Wir sehen zuerst ob dir1 existiert. Es geht nicht so filter() bewegt sich zum nächsten. Warum existiert es nicht? Weil wir keinen absoluten Pfad angegeben haben; wir haben einen relativen Pfad angegeben. Da wir in dir1 sind, sieht os.path.isfile(), ob eine Datei ist. Natürlich ist es nicht; es existiert nicht. Sie müssen den Pfad angeben. Sie könnten eine lambda Funktion:

filter(lambda x: os.path.isfile(os.path.join(dir, x)), os.listdir("DIRECTORY")) 

Es wäre wahrscheinlich in diesem Fall besser, eine Liste Verständnis zu verwenden:

[x for x in os.listdir("DIRECTORY") if os.path.isfile(os.path.join(dir, x))] 
Verwandte Themen