如何用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
相关产品推荐
相关产品推荐

