使用glob递归获取终端子目录

问题描述 投票:0回答:1

我有一系列包含文件的子目录:

/cars/ford/escape/sedan/
/cars/ford/escape/coupe/
/cars/ford/edge/sedan/
/cars/ferrari/testarossa/
/cars/kia/soul/coupe/

等等。

我想使用 glob(在 Python 中)从根目录 /cars/ 获取所有这些

terminal
子目录路径,但不包含其中的任何文件,也不包含子目录的任何父目录。每个目录仅包含文件,没有其他子目录。

我尝试使用

glob("**/")
,但这也会返回
/cars/ford/
/cars/ford/escape/
/cars/ford/edge
/cars/ferrari/
等。我不想要这些。

我还尝试使用

rglob("*/")
但这也会返回终端子目录中的所有文件。

我可以通过通配文件并从其父母那里制作一组来获得我需要的东西,但我觉得必须从全局方面对此有一个优雅的解决方案。不幸的是,我似乎无法找到合适的搜索词来发现它。谢谢!

python glob
1个回答
1
投票

glob
是这项工作的错误工具。
os.walk()
及其较新的子项是首选。

假设您使用的是足够新的 Python 来支持

pathlib.Path.walk()
:

import pathlib

def terminal_dirs(parent):
    for root, dirs, files in pathlib.Path(parent).walk():
        if not dirs:
            yield root
© www.soinside.com 2019 - 2024. All rights reserved.