You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除路径前缀回退点:合并两个文件路径的技术问题

如何合并两个路径并移除相对路径中的回退点(..)

我有两个路径:

path1 = "/users/fida/data_lake/data/archived/09142023"
path2 = "/users/fida/data_lake/data/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp"

期望合并后的输出路径为:

/users/fida/data_lake/data/archived/09142023/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp

尝试用os.path.relpath方法时,得到带回退点的路径:

..\..\localpublished\SPTTES\End_to_End_Edit_Schedule\2022-08-03_11_22_03.kp

需要解决的是移除这些回退点,得到正确的合并路径。


核心思路

之前调用os.path.relpath(path2, path1)得到带..的路径,是因为这个方法计算的是从path1到path2的相对路径——path2不在path1的子目录下,所以需要回退两级到共同父目录/users/fida/data_lake/data/,再进入path2的目录结构。

正确的做法是:先提取path2中相对于共同父目录的子路径,再把这部分拼接到path1后面。

方法一:用pathlib(推荐,Python 3.4+)

pathlib是Python 3.4+引入的面向对象路径处理模块,代码更简洁直观:

from pathlib import Path

path1 = Path("/users/fida/data_lake/data/archived/09142023")
path2 = Path("/users/fida/data_lake/data/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp")

# 共同父目录是path1的上级目录
common_parent = path1.parent
# 获取path2相对于共同父目录的相对路径(无回退点)
relative_part = path2.relative_to(common_parent)
# 拼接得到最终路径
merged_path = path1 / relative_part

print(merged_path)
# 输出:/users/fida/data_lake/data/archived/09142023/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp

方法二:用os.path模块

如果需要兼容Python 2或者习惯传统模块,也可以用os.path实现:

import os

path1 = "/users/fida/data_lake/data/archived/09142023"
path2 = "/users/fida/data_lake/data/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp"

# 获取共同父目录(path1的上级目录)
common_parent = os.path.dirname(path1)
# 计算path2相对于共同父目录的相对路径
relative_part = os.path.relpath(path2, common_parent)
# 拼接路径
merged_path = os.path.join(path1, relative_part)

print(merged_path)
# 输出:/users/fida/data_lake/data/archived/09142023/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp

通用兼容方案(自动识别共同路径)

如果路径结构更复杂(比如共同父目录不是path1的直接上级),可以用os.path.commonpath自动找到两个路径的最长共同路径,再提取path2中超出的部分:

import os

path1 = "/users/fida/data_lake/data/archived/09142023"
path2 = "/users/fida/data_lake/data/localpublished/SPTTES/End_to_End_Edit_Schedule/2022-08-03_11_22_03.kp"

# 自动获取最长共同路径
common_path = os.path.commonpath([path1, path2])
# 提取path2相对于共同路径的部分
relative_part = os.path.relpath(path2, common_path)
# 拼接
merged_path = os.path.join(path1, relative_part)

print(merged_path)

内容的提问来源于stack exchange,提问作者Hayat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:22:47