在解析此目录路径时保留斜杠
我有一个使用wxPython制作的应用程序。我通过一个文本框获取一个目录路径,使用的是GetValue()这个方法。
我注意到,当我试图把这个字符串写入一个变量时:
"C:\Documents and Settings\tchan\Desktop\InputFile.xls"
,
Python把这个字符串识别成了
'C:\\Documents and Settings\tchan\\Desktop\\InputFile.xls'
(在“Settings”和“UserName”之间缺少一个斜杠)。
更多信息:
这个目录路径字符串是通过“打开文件”对话框创建的,这个对话框就是你在任何文本处理软件的“打开”功能中看到的标准“选择文件”对话框。这个字符串会被写入一个文本框,之后在主线程开始时读取(以防用户想要更改它)。
编辑:我意识到问题出在'\t'被识别为“制表符”,而不是正常的斜杠。不过我不知道该如何解决这个问题,因为
3 个回答
0
你需要对斜杠进行转义。使用 \\
可以在字符串中存储一个实际的 \
:
path = "C:\\Documents and Settings\\tchan\\Desktop\\InputFile.xls"
2
我不是说这是正确的解决办法,但你可以这样做:
x = "C:\tmp".encode('string-escape')
x
'C:\\tmp'
如果你使用文件对话框的话,这样会更好:
os.path.join(dlg.GetDirectory(),dlg.GetFilename())
这里的 dlg 是你对话框的名字。
4
我觉得从wx获取路径的方法可能还有其他选择,这样可以避免你提到的问题,因为这似乎是一个比较常见的情况。不过,针对你描述的这种路径混乱的情况,有几种方法可以解决,可以通过把你现有的字符串转换成原始字符串来实现。
rawpath = "%r" % path
转换后的原始路径可能会有点乱,因为它可能会在反斜杠前加上额外的转义符,结果可能会变成这样:
"'C:\\\\Documents and Settings\\tchan\\\\Desktop\\\\InputFile.xls'"
不过,os.path.normpath这个函数似乎可以帮你整理一下。
import os.path
os.path.normpath(rawpath)