簡體   English   中英

如何通過名稱獲取路徑的特定父級?

[英]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 雙方。

我嘗試了兩種方法,但都感覺有點笨拙:

  1. 使用這些parts來找到正確的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')
  2. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM