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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:03