Skip to main content
 首页 » 编程设计

Python:获取路径中所有 parent 的迭代的优雅方式

2025年05月04日13exmyth

使用基于路径的资源系统,应用程序需要找到第一个基于路径管理给定资源的工作资源。我需要一种简洁的 pythonic 方式来生成以下内容:

输入:

/house/dogs/ralph/bone 

输出:

/house/dogs/ralph/bone 
/house/dogs/ralph 
/house/dogs 
/house 

注意:可以使用 os.path 或类似的内置插件,但这些不是文件系统资源。输出可以是任何可迭代的(列表、集合、生成器等)。

请您参考如下方法:

使用pathlib . PurePath s 为与文件系统无关的类路径对象提供抽象接口(interface)。特别是,PurePosixPath是使用正斜杠(/)作为分隔符的那种:

>>> from pathlib import PurePosixPath 
>>> p = PurePosixPath('/house/dogs/ralph/bone') 
>>> str(p.parent) 
/house/dogs/ralph 
>>> str(p.parent.parent) 
/house/dogs 

你可以很容易地循环这个:

p = PurePosixPath(...) 
while p != p.root: 
    # Do stuff to p 
    p = p.parent 

一个相当 pythonic 的画龙点睛之笔是让它成为一个生成器:

def receding_path(p): 
    p = PurePosixPath(p) 
    while p != p.root: 
        yield str(p) 
        p = p.parent 
 
for item in receding_path('/house/dogs/ralph/bone'): 
    # do stuff to each item