使用基于路径的资源系统,应用程序需要找到第一个基于路径管理给定资源的工作资源。我需要一种简洁的 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
