我只是python中的新手,对于noobish问题感到抱歉
>>> 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
>>>
其中两个是文件,那么当它应该为True时输出为False的原因是什么?
答案 0 :(得分:36)
当你打印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)))
答案 1 :(得分:6)
问题在于您的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))]