为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过路径的名称获取路径的特定父级?

如何通过路径的名称获取路径的特定父级?

HUWWW 2022-09-27 09:37:04
我有一个函数,它返回我通过常量名称查找的特定父项的完整路径。我目前正在使用 和 字符串作为路径,所以现在这是用正则表达式完成的。os.path例如,我想要的是一个能够得到的常量:parent = d/a/b/c/d/e      -->  /a/b/c/d/a/b/c/d/e/f    -->  /a/b/c/d/root/a/b/c/d/e -->  /root/a/b/c/d注意:如示例所示,我不想依赖双方的任何固定位置。我尝试了2种方法,但都感觉有点笨拙:使用这些部件以查找正确的父元素:>>> path = "/a/b/c/d/e/f">>> parts = Path(path).parts>>> parent_index = len(parts) - 1 - parts.index('d') - 1>>> Path(path).parents[parent_index]PosixPath('/a/b/c/d')使用这些部件并连接相关部件:>>> path = "/root/a/b/c/d/e">>> parts = Path(path).parts>>> Path(*parts[:parts.index('d')+1])PosixPath('/root/a/b/c/d')我会说第二个似乎是合理的,但是,我的问题是:有没有更直接的,悸动式的方法来实现这一目标?重复索引和切片感觉效率低下,而且相当混乱。parents附言:如果路径中不存在该部分,则足以引发异常或任何指标(现在我用上面的代码包装)。indextry/except
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您可以改用循环来继续向后搜索给定名称的父级:while


path = Path("/a/b/c/d/e/f")

while path.name != 'd':

    path = path.parent

    assert path.name, 'No parent found with the given name'

print(path)

此输出:


/a/b/c/d


查看完整回答
反对 回复 2022-09-27
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以拆分和联接字符串,并使用项目 +1 的索引


path='/a/b/c/d/e/f'

lpath=path.split('/')

index=lpath.index('d')+1

'/'.join(lpath[0:index])

输出:


'/a/b/c/d'


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号