Python 获取树中最低子目录的列表

Python 获取树中最低子目录的列表,python,os.walk,Python,Os.walk,我有一个特定目录的路径,我需要得到一个它的所有子目录的列表,这些子目录本身不包含任何子目录 例如,如果我有以下树: -father_dir: -son_dir1: -grandson.txt -son_dir2: -grandson_dir1: -greatgrandson1.txt 我想要一个包含以下内容的列表:[儿子,孙子] 我尝试的内容:我使用os.walk()获取father\u dir中的所有子目录,现在我尝试迭

我有一个特定目录的路径,我需要得到一个它的所有子目录的列表,这些子目录本身不包含任何子目录

例如,如果我有以下树:

-father_dir:
    -son_dir1:
        -grandson.txt
    -son_dir2:
        -grandson_dir1:
            -greatgrandson1.txt
我想要一个包含以下内容的列表:
[儿子,孙子]

我尝试的内容:我使用
os.walk()
获取
father\u dir
中的所有子目录,现在我尝试迭代每个子目录的内容(使用
os.listdir()
)并查找它是否包含目录。。。到目前为止,我还没有成功(因为
os.listdir()
没有给出目录的路径,只给出了它的名称),而且这似乎是一个非常麻烦的方法

欢迎任何简单的解决办法。谢谢

lowest_dirs = list()

for root,dirs,files in os.walk(starting_directory):
    if not dirs:
        lowest_dirs.append(root)
这是因为
os.walk
在目录中循环,依次将每个目录设置为
root
。你想知道它是不是一个最低级别的目录?这意味着它不包含其他目录,因此对于该根目录,如果
dirs
为空,则将其放入累加器中

如果您还想跳过最低级别的空文件夹,请执行以下操作:

    if files and not dirs:
如果只需要尾部(文件夹名称,而不是整个路径),请使用:

测试它:
使用
os.walk
和列表理解:

[os.path.split(r)[-1] for r, d, f in os.walk(tree) if not d]
很漂亮(包括实现和解释)!非常感谢!:-)
>>> lowest_dirs = list()
>>> toplevel = r"U:\User\adsmith\My Documents\dump\father_dir"
>>> for root,dirs,files in os.walk(toplevel):
...     if not dirs:
...         lowest_dirs.append(os.path.split(root)[-1])
>>> print(lowest_dirs)
['son_dir1', 'grandson_dir1']
[os.path.split(r)[-1] for r, d, f in os.walk(tree) if not d]