将相对路径解析为 Python 中的另一个相对路径

resolve a relative path to another relative path in 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

有没有可以实现这个的库?

您的示例的预期结果应为 ../../main.xml,即与 rel_path2 相同。 rel_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)

这为 tmp 提供了 '../../data/a/../../main.xml',为 result 提供了 '../../main.xml'

如果您想将 rel_path1 的最后一个组件视为一个文件(并忽略它),您可以使用 os.path.dirname 来实现:

rel_path1b = os.path.dirname(rel_path1)

这会将 rel_path1b 设置为 '../../data',然后您可以使用它代替 rel_path1 以获得 '../../../main.xml'