我只是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
>>>
Run Code Online (Sandbox Code Playgroud)
其中两个是文件,那么当它应该是True时输出为False的原因是什么?
qap*_*hla 42
当你打印时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))
Run Code Online (Sandbox Code Playgroud)
编辑:
正如icktoofay在下面的评论中所提到的,更好的解决方案可能是更换线路
print(os.path.isfile(os.path.join("/home/user/desktop/1", i)))
Run Code Online (Sandbox Code Playgroud)
或者更早地将"/ home/user/desktop/1"存储到某个变量x,允许替换行
print(os.path.isfile(os.path.join(x,i)))
Run Code Online (Sandbox Code Playgroud)
问题出在您的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)]
Run Code Online (Sandbox Code Playgroud)
或者只修复文件路径:
[f for f in os.listdir(dir_to_delete) if os.path.isfile(os.path.join(dir_to_delete, f))]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
67924 次 |
最近记录: |