48

我只是 python 的新手,很抱歉这个菜鸟问题

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

其中两个是文件,那么为什么输出应该为真时为假?

4

2 回答 2

53

当您 print 时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)))
于 2013-07-27T02:02:24.777 回答
10

问题在于您的 CWD(当前工作目录),因为os.listdir()给您的文件与提供的路径相关并且与 CWD 不一致。解决方案是在使用之前设置您的 CWD 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)]

或者只是修复文件的路径:

[f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))]
于 2017-03-09T10:26:52.670 回答