Python是否存在支持../的Path.relative_to()替代函数?
解决Python路径双向相对计算问题
Python标准库的pathlib.Path本身没有直接提供这种双向计算相对路径的函数,但可以通过两种方式实现需求:
用
os.path.relpath()转Path对象
这是最简便的方法,os.path.relpath()能处理任意两个路径的相对关系,不管谁是谁的父目录,返回的相对路径字符串可以直接转成Path对象使用:from pathlib import Path import os path1 = Path('/tmp/random/path') path2 = Path('/tmp/random/path/etc') relative_path = Path(os.path.relpath(path1, path2)) print(relative_path) # 输出: ..手动实现逻辑
可以通过拆分路径片段、对比公共前缀的方式,计算需要的..数量再拼接路径:from pathlib import Path def get_relative_path(from_path, to_path): # 先标准化路径,处理符号链接和相对路径 from_parts = from_path.resolve().parts to_parts = to_path.resolve().parts # 找到公共前缀的长度 common_len = 0 while common_len < len(from_parts) and common_len < len(to_parts) and from_parts[common_len] == to_parts[common_len]: common_len += 1 # 组装相对路径片段:用..回退到公共目录,再拼接目标路径的剩余部分 relative_parts = ['..'] * (len(to_parts) - common_len) + list(from_parts[common_len:]) return Path(*relative_parts) # 测试示例 print(get_relative_path(Path('/tmp/random/path'), Path('/tmp/random/path/etc'))) # 输出: .. print(get_relative_path(Path('/tmp/a/b/c'), Path('/tmp/a/d'))) # 输出: ../b/c
内容的提问来源于stack exchange,提问作者hl037_
相关产品推荐
相关产品推荐

