[英]How to get a specific parent of a path by its name?
我有一個 function ,它返回我通過常量名稱查找的特定父級的完整路徑。 我目前正在使用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
注意:如示例所示,我不想依賴任何固定的 position 雙方。
我嘗試了兩種方法,但都感覺有點笨拙:
>>> 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
並連接相關部分:
>>> path = "/root/a/b/c/d/e" >>> parts = Path(path).parts >>> Path(*parts[:parts.index('d')+1]) PosixPath('/root/a/b/c/d')
我會說第二個似乎是合理的,但我的問題仍然是:有沒有更直接的、 pythonic的方式來實現這一點? parents
的重復索引和切片感覺效率低下並且相當混亂。
PS 如果該部分不存在於路徑中,則足以引發異常或任何指示符(現在我用上面的index
將代碼包裝為try/except
)。
您可以使用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
您可以拆分和加入您的字符串並使用項目 +1 的索引
path='/a/b/c/d/e/f'
lpath=path.split('/')
index=lpath.index('d')+1
'/'.join(lpath[0:index])
output:
'/a/b/c/d'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.