python中是否有类似Path.relative_to()这样的函数,在路径不是另一个路径的子路径时支持'../'?

cl25kdpy  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(172)

Path.relative_to非常适合于抑制两个路径的公共前缀...但是如果第一个路径不是第二个路径的子目录/子文件,例如:

Path('/tmp/random/path').relative_to(Path('/tmp/random/path/etc'))

然后Python引发:

ValueError: '/tmp/random/path' is not in the subpath of '/tmp/random/path/etc' OR one path is relative and the other is absolute.

是否有函数会返回Path('..')

emeijp43

emeijp431#

我最终得到了:

def relative_to(from_:Path, to:Path):
  from_ = from_.absolute()
  to = to.absolute()
  f_parts = from_.parts
  t_parts = to.parts
  common_root_len = 0
  for f, t in zip(f_parts, t_parts) :
    if f != t :
      break
    common_root_len += 1
  return Path(*(('../',) * (len(t_parts) - common_root_len)), *f_parts[common_root_len:])

相关问题