Python os.path.commonprefix - 是否有面向路径的功能?

Python os.path.commonprefix - is there a path oriented function?

所以我有这个 python 代码:

print os.path.commonprefix([r'C:\root\dir',r'C:\root\dir1'])

实际结果

C:\root\dir

想要的结果

C:\root

问题 1

基于 os.path.commonprefix 文档:
Return最长路径前缀(逐个字符取)

有没有类似的功能:
Return最长路径前缀(taken dir by dir

问题 2

如果 commonprefixos.path 中实现,为什么它不是面向路径的,这意味着 return 我想要的结果而不是真实的结果?

注:

我自己可以很容易地实现它,但如果它已经实现了,为什么不使用它呢?

is there a path oriented function?

不,是的。 commonprefix() 可以处理任意序列,而不仅仅是字符串。


将路径拆分为组件并调用 commonprefix(),例如:

>>> import os
>>> from pathlib import PureWindowsPath
>>> a, b = map(PureWindowsPath, [r'C:\root\dir', r'C:\root\dir1'])
>>> PureWindowsPath(*os.path.commonprefix([a.parts, b.parts]))
PureWindowsPath('C:/root')

仅使用 pathlib:

def common_path(path1: Path, path2: Path) -> typing.Optional[Path]:
    while path1 is not None:
        if path2.is_relative_to(path1):
            return path1
        path1 = path1.parent if path1 != path1.parent else None
    return None

从 Python 3.5 开始,您可以使用 os.path.commonpath,这正是您想要的。与 commonprefix 不同,它有效 dir-by-dir.