Windows系统中如何让Python将变量存储的路径转为等效原始字符串处理
问题根本原因
你遇到的不是反斜杠转正斜杠的问题,而是拿到的路径字符串本身已经被损坏:原始路径中\2021前缀的\202被识别为八进制转义字符(对应十六进制\x82),\frame前缀的\f被识别为换页控制符(对应十六进制\x0c)。这两个位置的反斜杠已经被解析为控制字符,你再尝试替换反斜杠自然无法覆盖这部分,所以前面的\scans\能被替换,后面的路径段始终异常。
优先解决方案:从Blender获取路径时避免损坏
Blender官方文件选择框的返回值本身就是合法的Windows路径字符串,不会存在转义问题,你大概率是在拿到返回值后做了额外的错误操作(比如手动将路径转为字符串字面量、用eval处理路径、打印路径后二次复制赋值等)才导致转义被解析。
直接使用Blender原生返回的路径即可,示例代码如下:
import bpy from pathlib import Path from bpy.types import Operator from bpy_extras.io_utils import ImportHelper class ImportJsonOperator(Operator, ImportHelper): bl_idname = "custom.import_json" bl_label = "选择JSON文件" filename_ext = ".json" def execute(self, context): # self.filepath 就是原生正确路径,无需额外转义处理 file_path = Path(self.filepath) # 直接分离目录和文件名 dir_path = file_path.parent file_name = file_path.name print("目录:", dir_path) print("文件名:", file_name) return {"FINISHED"} # 注册并调用选择框 bpy.utils.register_class(ImportJsonOperator) bpy.ops.custom.import_json("INVOKE_DEFAULT")
应急修复方案:已损坏的路径字符串还原
如果确实无法修改路径获取逻辑,已经拿到了损坏的字符串,可以通过编码反向操作还原原始路径,利用Latin-1编码单字节与Unicode码点一一对应的特性修复:
# filename 为你手中已损坏的路径字符串 raw_bytes = filename.encode("latin-1") # 还原转义后重新按系统编码解码,Windows中文系统默认用GBK,也可尝试utf-8 fixed_path = raw_bytes.decode("unicode_escape").encode("latin-1").decode("gbk") # 后续可正常处理 from pathlib import Path p = Path(fixed_path) print(p.parent, p.name)
补充说明
- 不要尝试用原始字符串语法处理变量,
r前缀只作用于字符串字面量,对已生成的字符串变量完全无效。 - Windows系统下
pathlib、os.path模块本身就支持反斜杠路径,不需要手动替换为正斜杠,只要路径字符串本身正确,相关操作都可以正常执行。
内容的提问来源于stack exchange,提问作者D.J. Bohm
相关产品推荐
相关产品推荐

