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

