2013-07-27 17 views
17

Ich bin nur ein Neuling in Python,Warum gibt os.path.isfile False zurück?

>>> 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 
>>> 

zwei von ihnen so leid noobish Frage werden die Dateien dann, warum die Ausgabe falsch ist, wenn es wahr sein sollte?

Antwort

22

Wenn Sie os.path.isfile(i) drucken, prüfen Sie, ob "1.txt" oder "2" oder "3.txt" eine Datei ist. Wenn Sie os.path.isfile("/home/user/Desktop/1/1.txt") ausführen, haben Sie einen vollständigen Pfad zur Datei.

Versuchen Sie diese Zeile zu ersetzen mit

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

Edit:

Wie im Kommentar unten durch icktoofay erwähnt, eine bessere Lösung könnte die Zeile mit

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

zu ersetzen sein oder früher "/ home/user/desktop/1" in eine Variable x speichern, so dass die Zeile durch

ersetzt werden kann
+2

Wenn der Verzeichnisname und Dateinamen in Variablen waren, 'os.path. Join "würde es Ihnen ermöglichen, ein'/'zwischen ihnen zu vermeiden. – icktoofay

2

Das Problem ist mit Ihrem CWD (Current Working Directory), weil os.listdir() Ihnen Dateien gibt, die relativ zum bereitgestellten Pfad sind und inkonsistent mit CWD sind. Lösung ist Ihr CWD zu setzen, bevor Sie os.listidr():

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

os.chdir(dir_to_delete) 

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

oder Pfad zu Dateien reparieren:

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