Soru Neden os.path.isfile False döndürüyor?


Ben python'da bir acemi değilim, bu yüzden noobish soru için üzgünüm

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

Bunlardan ikisi dosyadır, o zaman doğru olması gerektiğinde çıktının neden yanlış olduğu?


21
2017-07-27 01:58


Menşei




Cevaplar:


Yazdırdığınızda os.path.isfile(i), çalıştırdığınızda "1.txt" veya "2" veya "3.txt" bir dosya olup olmadığını kontrol ediyorsunuz os.path.isfile("/home/user/Desktop/1/1.txt") dosyaya tam bir yol var.

Bu satırı değiştirmeyi deneyin.

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

Düzenle:

Aşağıdaki yorumda icktoofay tarafından belirtildiği gibi, daha iyi bir çözüm,

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

ya da daha önce "/ home / user / desktop / 1" değişkenini x değişkenine saklamak

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

27
2017-07-27 02:02



Dizin adı ve dosya adı değişkenlerdeyse, os.path.join sert kodlamadan kaçınmanıza izin verir / onların arasında. - icktoofay


Sorun, CWD'nizle (Current Working Directory) ilgilidir, çünkü os.listdir () size sağlanan yola göreli ve CWD ile tutarsız olan dosyaları verir. Çözüm, os.listidr () kullanmadan önce CWD'nizi ayarlamaktır:

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

os.chdir(dir_to_delete)

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

ya da sadece dosyaların yolunu onar:

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

4
2018-03-09 10:26