使用基于路径的资源系统,应用程序需要根据路径查找管理给定资源的第一个工作资源.我需要一种简洁,pythonic的方式来生成以下内容:
输入:
/house/dogs/ralph/bone
Run Code Online (Sandbox Code Playgroud)
输出:
/house/dogs/ralph/bone
/house/dogs/ralph
/house/dogs
/house
Run Code Online (Sandbox Code Playgroud)
注意:可以使用os.path或类似的内置函数,但这些不是文件系统资源.输出可以是任何可迭代的(列表,集合,生成器等).
使用pathlib.PurePaths为与文件系统无关的路径类对象提供抽象接口.特别PurePosixPath是,使用正斜杠(/)作为分隔符的类型:
>>> from pathlib import PurePosixPath
>>> p = PurePosixPath('/house/dogs/ralph/bone')
>>> str(p.parent)
/house/dogs/ralph
>>> str(p.parent.parent)
/house/dogs
Run Code Online (Sandbox Code Playgroud)
你可以轻松地循环:
p = PurePosixPath(...)
while p != p.root:
# Do stuff to p
p = p.parent
Run Code Online (Sandbox Code Playgroud)
一个相当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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |