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
如果 commonprefix
在 os.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.
所以我有这个 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
如果 commonprefix
在 os.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.