python - 将相对路径解析为 Python 中的另一个相对路径
问题描述
我有一个相对于另一个相对路径的相对路径,我想加入它们:
rel_path1 = '../../data/a'
rel_path2 = '../../main.xml'
# pseudo function: join_rel_paths
result = join_rel_paths(rel_path1, rel_path2)
# My expectation
expected_result = '../../../main.xml'
assert result == expected_result
有没有可以实现这一目标的库?
- 我试过
pathlib.Path
:(Path(rel_path1) / Path(rel_path2)).resolve()
- >它返回一个绝对路径cwd
- 我试过
urllib.parse.urljoin
:urljoin(rel_path1, rel_path2)
->main.xml
不是我想要的
解决方案
您的示例的预期结果应该是../../main.xml
,即与 相同rel_path2
。两个..
inrel_path2
剥离最后两个组件rel_path1
,将其保留为../..
。然后main.xml
跟随。(但请往下看,看看如何去掉 . 的最后一个组成部分rel_path1
。)
os.path.join
您可以通过使用后跟来实现这一点os.path.normpath
:
rel_path1 = '../../data/a'
rel_path2 = '../../main.xml'
tmp = os.path.join(rel_path1, rel_path2)
result = os.path.normpath(tmp)
这给出了'../../data/a/../../main.xml'
fortmp
和'../../main.xml'
for result
。
如果您想将 的最后一个组件rel_path1
视为文件(并忽略它),您可以os.path.dirname
这样做:
rel_path1b = os.path.dirname(rel_path1)
这设置rel_path1b
为'../../data'
,然后您可以使用它来代替rel_path1
获取'../../../main.xml'
。
推荐阅读
- wordpress - wp_list_categories - 自定义帖子类型
- flutter - InheritedWidget 的性能
- javascript - 在页面中找到一串文本并在其周围包裹一些 span 标签
- python - pyqt 向导 registerfield 作为字符串而不是整数
- html - 试图在 CSS 中选择单个元素并使其着色但它不起作用
- java - 带有直方图计时器的 SpringBoot 2.x 指标
- java - Java 8 lambda String.Split 映射错误
- python - 消息:元素
- python - 从 S3 读取 csv 文件并使用 Python 将其转换为 xlsx
- html - 在 HTML/CSS flexbox 中居中图像