Python 在不丢失斜杠的情况下解析此目录路径

Python 在不丢失斜杠的情况下解析此目录路径,python,string,wxpython,escaping,Python,String,Wxpython,Escaping,我有一个wxPython应用程序。我使用GetValue从文本框中获取目录路径 我注意到,在尝试将此字符串写入变量时: C:\Documents and Settings\tchan\Desktop\InputFile.xls python将字符串视为 “C:\\Documents and Settings\tchan\\Desktop\\InputFile.xls”在设置和用户名之间缺少斜杠 更多信息: 目录路径字符串由“打开文件”对话框创建,该对话框创建一个标准的“选择文件”对话框,您可以在

我有一个wxPython应用程序。我使用GetValue从文本框中获取目录路径

我注意到,在尝试将此字符串写入变量时:

C:\Documents and Settings\tchan\Desktop\InputFile.xls

python将字符串视为

“C:\\Documents and Settings\tchan\\Desktop\\InputFile.xls”在设置和用户名之间缺少斜杠

更多信息:

目录路径字符串由“打开文件”对话框创建,该对话框创建一个标准的“选择文件”对话框,您可以在文本处理器的任何“打开”函数中看到该对话框。该字符串将写入文本框,稍后在主线程开始时读取,以防用户想要更改它


编辑:我意识到问题来自于“\t”被视为制表符而不是普通的正斜杠。然而,我不知道如何克服这一点,因为你必须摆脱斜杠将在字符串中存储文字\:

path = "C:\\Documents and Settings\\tchan\\Desktop\\InputFile.xls"

你必须躲开刀砍将在字符串中存储文字\:

path = "C:\\Documents and Settings\\tchan\\Desktop\\InputFile.xls"

我怀疑有一种不同的方法可以从wx获得该路径,从而避免这个问题,因为这似乎是一个相当常见的问题。也就是说,有几种方法可以通过将您拥有的字符串转换为原始字符串来修复您描述的损坏路径

rawpath = "%r" % path
生成的rawpath可能会有点混乱,因为它可能会向反斜杠添加额外的转义,并提供类似以下内容:

"'C:\\\\Documents and Settings\\tchan\\\\Desktop\\\\InputFile.xls'"
不过,似乎os.path.normpath会解决这个问题

import os.path
os.path.normpath(rawpath)

我怀疑有一种不同的方法可以从wx获得该路径,从而避免这个问题,因为这似乎是一个相当常见的问题。也就是说,有几种方法可以通过将您拥有的字符串转换为原始字符串来修复您描述的损坏路径

rawpath = "%r" % path
生成的rawpath可能会有点混乱,因为它可能会向反斜杠添加额外的转义,并提供类似以下内容:

"'C:\\\\Documents and Settings\\tchan\\\\Desktop\\\\InputFile.xls'"
不过,似乎os.path.normpath会解决这个问题

import os.path
os.path.normpath(rawpath)

不是说这是正确的解决方案,但你可以

x = "C:\tmp".encode('string-escape')
x
'C:\\tmp'
如果使用“文件”对话框,效果更好

os.path.join(dlg.GetDirectory(),dlg.GetFilename())

其中dlg是您的对话框

并不是说这是正确的解决方案,但您可以

x = "C:\tmp".encode('string-escape')
x
'C:\\tmp'
如果使用“文件”对话框,效果更好

os.path.join(dlg.GetDirectory(),dlg.GetFilename())

dlg是您的对话框

等等,您是说wx控件正在给您断开的字符串?我正在使用wxPython模块创建GUI。我有一个打开文件按钮,用来选择桌面上的文件,返回上面提到的字符串。C:\Documents and Settings\tchan\Desktop\InputFile.xls。此字符串被传递到应用程序GUI上的文本框,我还把它读入一个变量,以后用来保存我的文件。你能发布你使用的代码并指出字符串错误的最早点吗?基本上你如果做一个x='C:\Documents and Settings\tchan\Desktop\InputFile.xls'然后打印x你就会知道我的意思了你在使用eval还是什么?您看到的行为发生在Python解释器尝试计算字符串文字时,而不是在对现有字符串变量执行操作时。也可以通过添加r:x=r'C:\Documents and Settings\tchan\Desktop\InputFile.xls来抑制它。等等,你是说wx控件正在给你那个断开的字符串?我正在使用wxPython模块创建GUI。我有一个打开文件按钮,用来选择桌面上的文件,返回上面提到的字符串。C:\Documents and Settings\tchan\Desktop\InputFile.xls。此字符串被传递到应用程序GUI上的文本框,我还把它读入一个变量,以后用来保存我的文件。你能发布你使用的代码并指出字符串错误的最早点吗?基本上你如果做一个x='C:\Documents and Settings\tchan\Desktop\InputFile.xls'然后打印x你就会知道我的意思了你在使用eval还是什么?您看到的行为发生在Python解释器尝试计算字符串文字时,而不是在对现有字符串变量执行操作时。也可以通过添加r:x=r'C:\Documents and Settings\tchan\Desktop\InputFile.xls'来抑制它。完美的,这是原始类型转换,我不知道什么是原始字符串。normpath足够聪明,可以在这里减少2个斜杠,而在那里没有斜杠。谢谢很好,这是原始类型转换,我不知道原始字符串之类的东西。normpath足够聪明,可以在这里减少2个斜杠,而在那里没有斜杠。谢谢在本例中,不太多,它添加了双转义,很像上面的@James'答案。在本例中,不太多,它添加了双转义,很像上面的@James'答案。