首页 > 解决方案 > 将相对路径解析为 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

有没有可以实现这一目标的库?

标签: pythonpath

解决方案


您的示例的预期结果应该是../../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'


推荐阅读