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

如何用Python os模块从绝对路径提取目标相对路径(含文件夹与文件名)

解决Python生成指定相对路径的问题

你遇到的问题是因为os.path.relpath()默认以当前工作目录作为基准路径,所以返回的是相对于脚本运行位置的路径,而非你需要的相对于C:\Data\client\vtpks的路径。

解决方法

这里提供两种可靠的实现方式:

方法1:指定relpath的基准目录

直接给os.path.relpath()传入第二个参数——你想要作为相对路径起点的目录(即file_dir的父目录C:\Data\client\vtpks),这是最通用的方案。

修正后的代码:

import os

file_dir = r"C:\Data\client\vtpks\push"  # 加r避免转义字符解析错误

for root, _, files in os.walk(file_dir):
    for file_name in files:
        if file_name.endswith(".vtpk"):
            absolute_path = os.path.join(root, file_name)
            print(absolute_path)  # 输出:C:\Data\client\vtpks\push\myfile.vtpk
            
            # 指定基准目录为file_dir的父目录
            base_dir = os.path.dirname(file_dir)
            rel_path = os.path.relpath(absolute_path, base_dir)
            print(rel_path)  # 输出:push\myfile.vtpk

方法2:截取路径后缀(适用于固定层级场景)

如果你的文件结构固定,也可以直接从绝对路径中截取目标部分,不过这种方法依赖路径字符串长度,通用性不如方法1:

import os

file_dir = r"C:\Data\client\vtpks\push"

for root, _, files in os.walk(file_dir):
    for file_name in files:
        if file_name.endswith(".vtpk"):
            absolute_path = os.path.join(root, file_name)
            print(absolute_path)
            
            # 截取基准目录之后的路径部分
            base_dir = os.path.dirname(file_dir)
            rel_path = absolute_path[len(base_dir) + 1:]  # +1用于移除路径分隔符
            print(rel_path)  # 输出:push\myfile.vtpk

额外提示

路径字符串前务必加r(原始字符串标记),防止\被Python解析为转义字符,导致路径识别错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:31