簡體   English   中英

有沒有辦法使用 Pathlib 遍歷父文件夾直到名稱匹配?

[英]Is there a way to use Pathlib to traverse parents folders until a name matches?

我正在與一位同事討論是否有一種內置(或干凈)的方式來使用 Pathlib 遍歷任意路徑以查找給定的父文件夾,例如存儲庫的根目錄(每個用戶可能有所不同)所述回購協議的本地副本)。 我在下面模擬了所需的行為:

from pathlib import Path

def find_parent(path: Path, target_parent: str) -> Path:
    for part in path.parts[::-1]:
        if part != target_parent:
            path = path.parent
        else:
            break
    return path

path = Path("/some/arbitrarily/long/path/ROOT_FOLDER/subfolder1/subfolder2/file.py")
root = find_parent(path, "ROOT_FOLDER")
assert root == Path("/some/arbitrarily/long/path/ROOT_FOLDER")

有沒有更簡單的方法來實現這一目標?

您可以直接遍歷path.parents (復數),這樣會更簡潔一些:

def find_parent(path: Path, target_parent: str) -> Path | None:
    # `path.parents` does not include `path`, so we need to prepend it if it is
    # to be considered
    for parent in [path] + list(path.parents):
        if parent.name == target_parent:
            return parent

(不需要 else 子句。)

根據@Chris 的回答,我發現下面的一句話就是我所追求的:

root = [parent for parent in path.parents if parent.name == "ROOT_FOLDER"][0]


根據@SUTerliakov 的建議更新為root = next((parent for parent in path.parents if parent.name == "ROOT_FOLDER"), None)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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