我遍历目录树(向上),我需要找到所有目录。但是os.listdir()
的输出与os.path.isdir()
结合使用时并不是我所期望的。
例如,这只显示两个目录(bin
和dev
):
$ python
Python 2.7.9 (default, Mar 1 2015, 12:57:24)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> for d in os.listdir('/'):
... if os.path.isdir(d):
... print d
...
bin
dev
>>>
但是,删除os.path.isdir()
调用会列出所有条目,包括文件和目录:
>>> for d in os.listdir('/'):
... print d
...
sbin
home
initrd.img
[...]
run
sys
>>>
令人惊讶的是,在第一个代码段列出的不目录上运行isdir
会返回True:
>>> os.path.isdir('/run')
True
>>>
我错过了什么?
答案 0 :(得分:4)
您的os.path.isdir
正在检查当前目录下是否存在该目录,而不是os.listdir
列出的目录('/'
)。
试试这个:
for d in os.listdir('/'):
if os.path.isdir(os.path.join('/', d)):
print d