我正在尝试将代码从使用os.path
移至使用os.path
。
我有一个函数,该函数通过常数名称返回我要查找的特定父级的完整路径。如前所述,我当前正在使用pathlib.Path
和字符串作为路径,因此现在这是通过正则表达式完成的。
例如,我想要一个常数pathlib.Path
能够得到:
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
元素:
parts
使用parts
并连接相关的字符:
parents
我想说第二个似乎合理,但是我的问题是:是否有更好的方法来实现这一目标?
P.S。如果路径中不存在该部分,则足以引发异常或任何指示符(现在,我将上面的parents
换为>>> 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')
来包装代码)。
您可以使用parts
循环来继续向后搜索给定名称的父项:
parts
此输出:
>>> path = "/root/a/b/c/d/e"
>>> parts = Path(path).parts
>>> Path(*parts[:parts.index('d')+1])
PosixPath('/root/a/b/c/d')