分歧

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

返回不同的結果:分歧

os.listdir('DIRECTORY') 

在CSV文件的目錄中,listdir同時命令返回一組文件(如預期),但過濾器沒有返回(意外)

+1

想看的目錄清單,並在過濾器是如何實現的。 – Hun

+0

你是否將該目錄預先添加到文件中? 'listdir(「\ path \ to \ dir \」)'會返回類似'[「file1.txt」,「file2.dat」,...]''然後你需要調用'isfile(「\ path \ to \目錄\ FILE1.TXT「)'。 – Julien

回答

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()返回做包括路徑文件名列表。這意味着os.listdir("/home/zondo")可能會給["dir1", "file1", "file2"]。現在假設我們在執行此命令時位於dir1。我們首先看看是否存在dir1。它不會如此filter()移動到下一個。爲什麼它不存在?因爲我們沒有提供絕對路徑;我們提供了一個相對路徑。由於我們在dir1,os.path.isfile()正在看如果/home/zondo/dir1/dir1是一個文件。當然不是;它不存在。你需要提供它的路徑。你可以使用一個lambda功能:

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

它很可能是在這種情況下更好地使用列表理解:

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