明确地将字符串变为原始字符串

时间:2014-02-27 21:24:03

标签: python python-3.x

我正在阅读从文本文件中读取注册表的路径。注册表路径是

HKEY_LOCAL_MACHINE\Software\MYAPP\6.3

我将此注册表存储在变量中:

REGISTRY_KEY

然后我从字符串中剥离HKEY_LOCAL_MACHINE部分并尝试读取密钥的值。

if REGISTRY_KEY.split('\\')[0] == "HKEY_LOCAL_MACHINE":
        keyPath = REGISTRY_KEY.strip("HKEY_LOCAL_MACHINE\\")
        try:
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyPath)
            value = winreg.QueryValueEx(key, "InstallPath")[0] 
        except IOError as err:
            print(err)

我收到以下错误

[WinError 2] The system cannot find the file specified

但是,如果我手动执行此操作

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r'Software\MYAPP\6.3')

OR

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,"Software\\MYAPP\\6.3")

它有效。

那么有什么方法可以让keyPath变量成为原始字符串或包含double' \'

PS:我使用的是Python 3.3

2 个答案:

答案 0 :(得分:0)

您的REGISTRY_KEY.strip()电话没有按照您的想法行事。它不会从字符串的开头删除字符串HKEY_LOCAL_MACHINE\。相反,它会从字符串的两端以任何顺序删除字符HKE等。这就是为什么当你手动输入你期望的东西时它会起作用的原因。

至于你的原始问题,双反斜杠是一个转义序列,它在你的字符串中产生一个反斜杠,因此没有必要将keyPath转换为双斜杠。

答案 1 :(得分:0)

  • 原始str是一种输入字符串的方法,因此您无需转义特殊字符。进入同一个str的另一种方法是转义特殊字符(blackslash就是其中之一)。他们会有相同的数据。所以你的问题确实没有答案。

  • 您也错误地使用strip,但这对于此特定字符串无关紧要。因为第一个\之后的第一个字符SS不在您的strip命令中,并且您的密钥以数字结尾,也不在您的strip命令中。但是你需要修复它,这样其他键就不会搞砸了。你很幸运这个字符串。

>>> r"HKEY_LOCAL_MACHINE\Software\MYAPP\6.3".strip("HKEY_LOCAL_MACHINE\\")
'Software\\MYAPP\\6.3'
  • 至于你真正的问题。字符串还有其他错误。在致电print repr(keyPath)
  • 之前,请尝试OpenKey

编辑:看起来SylvainDefresne正确猜到了字符串末尾的换行符