如何用pathlib获取路径对XML项目文件的相对路径解决替换报错问题
路径计算报错解决方法
错误原因
你调用relative_to方法时传入的基准是项目文件的完整路径(包含文件名),而相对路径的计算基准应该是项目文件所在的目录,不是文件本身,因此触发了路径不匹配的报错。
解决步骤
- 提取项目文件所在的目录作为相对路径的计算基准
- 基于该目录分别计算源路径、目标路径的相对路径
- 补充路径分隔符兼容逻辑,避免XML文件中不同分隔符写法导致的漏替换
修改后的代码
import os import fileinput from pathlib import Path def fix_keil_project(prjFilePath, SrcDstPath): # 取项目文件所在目录作为计算基准 prj_dir = prjFilePath.parent # 计算源、目标路径相对于项目目录的相对路径,兼容跨层级、跨盘符场景 src_rel = os.path.relpath(SrcDstPath.src, prj_dir) dst_rel = os.path.relpath(SrcDstPath.dst, prj_dir) # 统一转成正斜杠,适配Keil项目文件的常见路径写法 src_rel_posix = src_rel.replace("\\", "/") dst_rel_posix = dst_rel.replace("\\", "/") with fileinput.FileInput(prjFilePath, inplace=True, backup='.bak') as file: for line in file: # 同时匹配反斜杠、正斜杠两种路径格式,避免漏替换 line = line.replace(src_rel, dst_rel_posix).replace(src_rel_posix, dst_rel_posix) print(line, end='')
补充说明
- 如果你使用Python 3.11及以上版本,可以直接用pathlib原生方法实现相对路径计算:
SrcDstPath.src.relative_to(prj_dir, walk_up=True),效果和os.path.relpath一致 - 替换逻辑中做了分隔符兼容处理,可覆盖Keil项目文件中两种常见的路径写法,避免匹配失败
内容的提问来源于stack exchange,提问作者Noam Yulzari
相关产品推荐
相关产品推荐

