os.path.isdir() returns false 到现有文件夹

os.path.isdir() returns false to an existing folder

我读了 this 其他 post 但是 none 那里的解决方案有效,假设我有这个文件夹结构:

main.py
src\
  s1\
    dummy.txt
  s2\
    dummy.txt

还有这段代码:

import os

for filename in os.listdir('.'):
    isdir=os.path.isdir(filename)
    print('%s : %s'%(filename,isdir))

当我 运行 它以 . 作为 listdir() 的参数时它工作,它显示 src : Truemain.py : False 这是正确的,因为有一个名为 src 的文件夹,但是当我尝试 运行 使用 src 作为参数时,这是我得到的输出:s2 : Falses1 : False,它应该 return true 因为在 src 中还有两个文件夹,分别称为 s1 和 s2。

我不能真正使用转义的反斜杠,因为文件夹路径将由其他函数提供,所以它都是动态的,但我已经尝试将反斜杠动态替换为正斜杠,但它也没有用。

我创建这个 Repl 是为了准确展示发生了什么。

那是因为它正在检查s1是否是当前工作目录下的一个目录。

>>> for x in os.listdir('src'):
...     print(f'Does {os.path.abspath(x)} exists? {os.path.exists(os.path.abspath(x))}')
...
Does d:\SO\tmp\s1 exists? False

所以我建议改用 scandir。

>>> with os.scandir('src') as it:
...     for entry in it:
...             print(f"{entry} is directory? {os.path.isdir(entry)}")
...
<DirEntry 's1'> is directory? True

如果你使用 pathlib 模块来处理文件系统相关的东西,那就更好了。

>>> from pathlib import Path
>>> entries = Path.cwd().glob("**/*")
>>> for entry in entries:
...     print(f"{entry} is a directory ? {entry.is_dir()}")
...
d:\SO\tmp\src is a directory ? True
d:\SO\tmp\src\s1 is a directory ? True