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 : True
和 main.py : False
这是正确的,因为有一个名为 src
的文件夹,但是当我尝试 运行 使用 src
作为参数时,这是我得到的输出:s2 : False
和 s1 : 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
我读了 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 : True
和 main.py : False
这是正确的,因为有一个名为 src
的文件夹,但是当我尝试 运行 使用 src
作为参数时,这是我得到的输出:s2 : False
和 s1 : 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