有没有办法在Python中返回当前目录中所有子目录的列表?

我知道您可以对文件执行此操作,但我需要获得目录列表。


当前回答

对于像我这样只需要一个目录中直接文件夹名称的人来说,这在Windows上是可行的。

import os

for f in os.scandir(mypath):
    print(f.name)

其他回答

您是指直接子目录,还是树下的每个目录?

无论哪种方式,你都可以使用os。走路做这个:

os.walk(directory)

将为每个子目录生成一个元组。三元组中的第一个条目是一个目录名,因此

[x[0] for x in os.walk(directory)]

应该会递归地给出所有子目录。

注意,元组中的第二个条目是第一个位置的条目的子目录列表,所以您可以使用这个代替,但它不太可能节省太多时间。

但是,你可以使用它来给你直接的子目录:

next(os.walk('.'))[1]

或者查看已经发布的其他解决方案,使用os。Listdir和os.path。isdir,包括“如何在Python中获取所有直接子目录”中的那些。

谢谢你们的建议,伙计们。我遇到了软链接(无限递归)作为dirs返回的问题。Softlinks吗?我们不想要臭软链接!所以…

这只是渲染dirs,而不是软链接:

>>> import os
>>> inf = os.walk('.')
>>> [x[0] for x in inf]
['.', './iamadir']

我就是这么做的。

    import os
    for x in os.listdir(os.getcwd()):
        if os.path.isdir(x):
            print(x)

由于我在使用Python 3.4和Windows UNC路径时偶然发现了这个问题,下面是这个环境的一个变体:

from pathlib import WindowsPath

def SubDirPath (d):
    return [f for f in d.iterdir() if f.is_dir()]

subdirs = SubDirPath(WindowsPath(r'\\file01.acme.local\home$'))
print(subdirs)

Pathlib是Python 3.4中的新功能,它使得在不同操作系统下使用路径更加容易: https://docs.python.org/3.4/library/pathlib.html

这个答案似乎并不存在。

directories = [ x for x in os.listdir('.') if os.path.isdir(x) ]