2013-07-27 223 views
17

我只是在Python新手,對noobish問題很抱歉爲什麼os.path.isfile返回False?

>>> import os 
>>> os.listdir("/home/user/Desktop/1") 
['1.txt', '2', '3.txt'] 
>>> os.path.isfile("/home/user/Desktop/1/1.txt") 
True 
>>> for i in os.listdir("/home/user/Desktop/1"): 
...  print(os.path.isfile(i)) 
... 
False 
False 
False 
>>> 

它們中的兩個文件,那麼爲什麼輸出爲假時,它應該是真實的嗎?

回答

22

當您打印os.path.isfile(i)時,您正在檢查「1.txt」或「2」或「3.txt」是否爲文件,而當您運行os.path.isfile("/home/user/Desktop/1/1.txt")時,您具有該文件的完整路徑。

嘗試用替換該行

print(os.path.isfile("/home/user/desktop/1/" + i)) 

編輯:

如在下面的評論通過icktoofay提到,一個更好的解決辦法可能是,以取代線

print(os.path.isfile(os.path.join("/home/user/desktop/1", i))) 

或更早地將「/ home/user/desktop/1」存儲到某個變量x中,從而允許該行被替換爲

print(os.path.isfile(os.path.join(x,i))) 
+2

如果目錄名和文件名是變量,'os.path中。 join'可以避免在它們之間硬編碼'/'。 – icktoofay

2

問題出在您的CWD(當前工作目錄)上,因爲os.listdir()會爲您提供與提供的路徑相關並且與CWD不一致的文件。解決辦法是使用os.listidr()前將CWD:

dir_to_delete = '/home/user/Desktop/1' 

os.chdir(dir_to_delete) 

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

或只修路徑文件:

[f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))] 
相關問題