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

标签 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
>>>

我错过了什么?

最佳答案

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

试试这个:

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

关于带有 os.path.isdir() 的 Python os.listdir() 不返回所有目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090642/

相关文章:

具有多个条件的Python numpy数组迭代图像

python - 如何使用arm模板部署python azure函数?

python - 无法在 Python 中从容器中删除多个 Blob

python - 执行后如何获取函数局部变量的值?

python - 如何将多列附加到前 3 列并使用 pandas 重复索引值?

python - 使用 BeautifulSoup 获取特定标签后的值

python - 使用前 10 个值和下一个值之间的平均值替换 pandas 数据框中的特定值

python - 如何避免由 Python 的早期绑定(bind)默认参数(例如可变默认参数 "remembering"旧数据)引起的问题?

python - tkMessageBox 弹出窗口从桌面运行时不可见,从引导运行时可见

python - Cython 中的继承(简短的示例代码)