为什么os.path.isfile返回False?

时间:2013-07-27 01:58:20

标签: python-2.7

我只是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的原因是什么?

2 个答案:

答案 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))]