我在这样的变量中有一个路径:
path = "C:\HT_Projeler\7\Kaynak\wrapped_gedizw.tif"
哪个不正确,因为它包含转义序列:
>>> path
'C:\\HT_Projeler\x07\\Kaynak\\wrapped_gedizw.tif'
如何修复此变量中的路径,使其等同于r"C:\HT_Projeler\7\Kaynak\wrapped_gedizw.tif"
或"C:/HT_Projeler/7/Kaynak/wrapped_gedizw.tif"
?
添加
这是我的确切脚本:
...
basinFile = self._gv.basinFile
basinDs = gdal.Open(basinFile, gdal.GA_ReadOnly)
basinNumberRows = basinDs.RasterYSize
basinNumberCols = basinDs.RasterXSize
...
在这里self._gv.basinFile
构成了我的道路。所以我不能把self._gv.basinFile
答案 0 :(得分:5)
如果在Python代码中插入路径,只需使用其他人建议的原始字符串。
如果相反该字符串不在您的控制范围内,那么“事后”并没有太多可以做的事情。转义序列转换不是单射的,因此,给定一个已经处理了转义序列的字符串,您不能单独“返回”。 IOW,如果有人错误地写道:
path = "C:\HT_Projeler\7\Kaynak\wrapped_gedizw.tif"
如你所示,你得到了
'C:\\HT_Projeler\x07\\Kaynak\\wrapped_gedizw.tif'
并且无法猜测“他们的意思”,因为\x07
可能已被写为\7
,\x07
或\a
。哎呀,任何一封信都可能最初被写成一个转义序列 - 你在{1}}中看到的那个字符串实际上可能是a
。
长话短说:您的来电者有责任为您提供正确的数据。一旦它被破坏就无法再回来了。
答案 1 :(得分:1)
在一般情况下,如果没有外部检查计算机上的实际路径,就无法判断路径中的字符是否正确(并且“特殊字符”的定义不是很明确;您怎么知道路径不是\0x41
,无论如何转换为A
?)
作为弱启发式,您可以查找特定编辑距离内的路径名称,例如。
import os
from difflib import SequenceMatcher as similarity # or whatever
path_components = os.path.split(variable)
path = ''
for p in path_components:
npath = os.path.join(path, p)
if not os.path.exists(npath):
similar = reversed(sorted([(similarity(None, x, p).ratio(), x) in os.listdir(npath)]))
# recurse on most similar, second most similar, etc? or something
path = npath