Python的os.listdir()与os.path.isdir()不返回所有目录

时间:2015-10-12 21:38:32

标签: python

我遍历目录树(向上),我需要找到所有目录。但是os.listdir()的输出与os.path.isdir()结合使用时并不是我所期望的。

例如,这只显示两个目录(bindev):

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

我错过了什么?

1 个答案:

答案 0 :(得分:4)

您的os.path.isdir正在检查当前目录下是否存在该目录,而不是os.listdir列出的目录('/')。

试试这个:

for d in os.listdir('/'):
    if os.path.isdir(os.path.join('/', d)):
        print d
相关问题