[英]How can I use os.walk or any other alternative to traverse folders recursively by the natural name order?
[英]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.