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

Python中如何将含转义字符的Windows路径转为原始字符串?

解决Python中Windows路径转义后的还原问题

首先得明确一个关键:原始字符串前缀r只对字符串字面量生效。当你直接写fld_dic = 'D:TestData\20190917...'时,Python会自动解析其中的转义序列——比如\201会被当成八进制转义字符(对应Unicode U+0081),这时候变量fld_dic里存储的已经不是你输入的\201,而是转义后的特殊字符了。这时候再用fr'{fld_dic}',本质是把已经转义后的字符重新格式化,自然得不到你想要的结果。

最优解决方案:定义时就用原始字符串

如果你是自己定义这个路径变量,最直接也最不容易出错的方式是在定义字面量时就加上r前缀,从根源避免转义:

fld_dic = r'D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data'
print(fld_dic)
# 输出:D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data

如果你只能拿到已转义的字符串(比如从外部读取)

如果这个字符串是从文件、用户输入或者其他外部来源获取的,已经被转义过了,那可以通过unicode-escape编码来还原它的转义表示:

# 假设这是你已经得到的被转义后的字符串
fld_dic = 'D:TestData\x8190917_DT19_HigherFlowRate_StdCooler\\DM19_Data'
# 还原成带转义符的字符串
restored_path = fld_dic.encode('unicode-escape').decode()
print(restored_path)
# 输出:D:TestData\\x8190917_DT19_HigherFlowRate_StdCooler\\DM19_Data

不过这里要注意:因为\201和\x81是同一个字符的不同转义写法,Python无法区分你原本输入的是哪种转义形式,所以还原后会显示为十六进制转义\x81而不是八进制的\201。如果你的场景必须严格还原为八进制转义,可能需要额外的字符映射处理,但这种情况很少见——对于Windows路径来说,只要路径里的字符正确,转义形式不影响实际使用。

另外,处理Windows路径还有一个更稳妥的方式:使用pathlib模块,它会自动处理路径分隔符的问题,不需要手动纠结转义:

from pathlib import Path

# 直接用原始字符串或者正斜杠都可以
fld_path = Path(r'D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data')
# 或者用正斜杠,pathlib会自动转换为Windows的反斜杠
fld_path = Path('D:TestData/20190917_DT19_HigherFlowRate_StdCooler/DM19_Data')

print(fld_path)
# 输出:D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:47:37