【问题标题】:parse this directory path without losing slash解析这个目录路径而不丢失斜杠
【发布时间】:2010-05-19 07:45:16
【问题描述】:

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

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

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

python 将字符串视为

'C:\\Documents and Settings\tchan\\Desktop\\InputFile.xls'(“设置”和“用户名”之间缺少斜线)。

更多信息:

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

编辑:我意识到问题出在 '\t' 被视为“制表符”而不是正常的正斜杠。但是我不知道如何解决这个问题,因为

【问题讨论】:

  • 等等,你是说 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'

标签: python string wxpython escaping


【解决方案1】:

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

rawpath = "%r" % path

生成的原始路径可能会有些混乱,因为它可能会在反斜杠上添加额外的转义符并给你类似的东西:

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

似乎 os.path.normpath 会清理它。

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

【讨论】:

  • 完美,这就是我不知道的原始类型转换(没有 raw_string() 之类的东西)。 normpath 足够聪明,可以在这里减少 2 个斜线,而那里没有斜线。谢谢!
【解决方案2】:

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

x = "C:\tmp".encode('string-escape')
x
'C:\\tmp'

如果你使用文件对话框更好

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

dlg 是你的对话框

【讨论】:

  • 在这种情况下,不多,它添加了双重转义,就像上面@James的回答一样。
【解决方案3】:

你必须避开斜线。 \\ 将在字符串中存储文字 \

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2020-08-17
    • 2011-11-25
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多