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

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

等等.

我希望使用GLOB(在Python中)从根目录/cars/获得所有这terminal个子目录路径,但不包括其中的任何文件,也不包括子目录的任何父目录.每个目录只包含文件,不包含更多的子目录.

我try 使用glob("**/"),但也返回/cars/ford//cars/ford/escape//cars/ford/edge/cars/ferrari/等.我不想要这些.

我也try 使用rglob("*/"),但这也会返回终端子目录中的所有文件.

我可以通过清理文件和制作一套他们的父母来得到我需要的东西,但我觉得从全局的Angular 来看,肯定有一个优雅的解决方案来解决这个问题.不幸的是,我似乎找不到合适的搜索词来发现它.谢谢!

推荐答案

glob不是用于这项工作的错误工具:传统的POSIX-Y GLOB表达式不支持任何类型的负面断言(extlobs支持,但它仍然是一种限制性的支持--对单个名称进行断言,而不是对同一文件系统上存在或不存在的内容进行断言--这不适用于您的用例,而且无论如何,Python也不支持它们).os.walk()和它的新生的子元素更适合.

假设您使用的是一个足够支持pathlib.Path.walk()的新的Python:

import pathlib

def terminal_dirs(parent):
    for root, dirs, files in pathlib.Path(parent).walk():
        if not dirs:
            yield root

对于旧版本的Python,os.walk()可以类似地使用:

import os

def terminal_dirs(parent):
    for dirpath, dirnames, filenames in os.walk(parent):
        if not dirnames:
            yield dirpath

当然,如果匆忙,这两个都可以压缩为一行代码:

result = [ r for (r,d,f) in os.walk('/cars') if not d ]

Python相关问答推荐

TARete错误:类型对象任务没有属性模型'

仿制药的类型铸造

为什么tkinter框架没有被隐藏?

在Python中处理大量CSV文件中的数据

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

处理(潜在)不断增长的任务队列的并行/并行方法

如何在polars(pythonapi)中解构嵌套 struct ?

Mistral模型为不同的输入文本生成相同的嵌入

如何使用数组的最小条目拆分数组

无法定位元素错误404

如何将多进程池声明为变量并将其导入到另一个Python文件

当递归函数的返回值未绑定到变量时,非局部变量不更新:

CommandeError:模块numba没有属性generated_jit''''

通过ManyToMany字段与Through在Django Admin中过滤

如何使用Numpy. stracards重新编写滚动和?

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

ModuleNotFoundError:Python中没有名为google的模块''

如何计算Pandas 中具有特定条件的行之间的天差