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

Python 3.8+:基于指定路径解析相对/绝对路径(不切换当前目录)

Python 3.8+ 解析基于指定路径的绝对路径方法

问题描述

给定一个可能为绝对或相对路径的path_to_resolve,需要在不改变当前工作目录的前提下,基于另一个给定路径relative_to解析出它的绝对路径(若原路径为相对路径)。当前工作目录假设为/cwd,预期行为示例如下:

def resolve_path (relative_to, path_to_resolve):
    ???

# 预期输出
resolve_path(".", "a/relative/path")
# --> returns /cwd/a/relative/path

resolve_path("example", "a/relative/path")
# --> returns /cwd/example/a/relative/path

resolve_path("/some/path", "a/relative/path")
# --> returns /some/path/a/relative/path

resolve_path("/some/path", "..")
# --> returns /some

resolve_path("/some/path", "/an/absolute/path")
# --> returns /an/absolute/path

resolve_path("/some/path", "/.")
# --> returns /

解决方案

Python 3.8+ 可以通过os.path或pathlib模块实现该需求,两种方法如下:

1. 使用os.path模块

通过组合路径处理函数实现逻辑:先判断目标路径是否为绝对路径,是则直接规范化返回;否则将基准路径转为绝对路径,拼接后再规范化处理。

import os

def resolve_path(relative_to, path_to_resolve):
    if os.path.isabs(path_to_resolve):
        return os.path.normpath(path_to_resolve)
    abs_base = os.path.abspath(relative_to)
    return os.path.normpath(os.path.join(abs_base, path_to_resolve))

2. 使用pathlib模块(推荐)

pathlib是Python 3.4+引入的面向对象路径处理模块,代码更简洁直观,Path.resolve()方法会自动处理路径中的.和..符号,返回规范化的绝对路径。

from pathlib import Path

def resolve_path(relative_to, path_to_resolve):
    target_path = Path(path_to_resolve)
    if target_path.is_absolute():
        return str(target_path.resolve())
    base_path = Path(relative_to).resolve()
    return str((base_path / target_path).resolve())

两种方法都能满足示例中的所有预期输出,pathlib的写法更符合现代Python的编码习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:41:11