【发布时间】:2022-11-22 20:33:55
【问题描述】:
我正在与一位同事讨论是否有内置(或干净)的方法来使用 Pathlib 遍历任意路径以查找给定的父文件夹,例如存储库的根目录(每个用户可能有所不同)所述回购协议的本地副本)。我在下面模拟了所需的行为:
from pathlib import Path
def find_parent(path: Path, target_parent):
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")
有没有更简单的方法来实现这一目标?
【问题讨论】:
-
while path.name != 'ROOT_FOLDER' and path.parent != path: path = path.parent?这将迭代到根。最后,您需要检查结果路径是否不是/(如果找不到目录,它将是),与 while 条件(if path == path.parent: raise RuntimeError('Wrong location: make sure you are located in a proper directory')相同。 -
assert root == Path是做什么的? -
@Bhargav 这只是为了展示我试图用这段代码 sn-p 实现的目标。
-
明白了……明白了
-
尽管您的解决方案没问题(除了缺少返回 - 它应该是
return path而不是break)。这个问题更适合 CodeReview SE,因为您有工作代码并且想知道它是否可以改进并且没有实际问题。