我正在阅读从文本文件中读取注册表的路径。注册表路径是
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
答案 0 :(得分:0)
您的REGISTRY_KEY.strip()
电话没有按照您的想法行事。它不会从字符串的开头删除字符串HKEY_LOCAL_MACHINE\
。相反,它会从字符串的两端以任何顺序删除字符H
,K
,E
等。这就是为什么当你手动输入你期望的东西时它会起作用的原因。
至于你的原始问题,双反斜杠是一个转义序列,它在你的字符串中产生一个反斜杠,因此没有必要将keyPath
转换为双斜杠。
答案 1 :(得分:0)
原始str是一种输入字符串的方法,因此您无需转义特殊字符。进入同一个str的另一种方法是转义特殊字符(blackslash就是其中之一)。他们会有相同的数据。所以你的问题确实没有答案。
您也错误地使用strip
,但这对于此特定字符串无关紧要。因为第一个\
之后的第一个字符S
和S
不在您的strip命令中,并且您的密钥以数字结尾,也不在您的strip命令中。但是你需要修复它,这样其他键就不会搞砸了。你很幸运这个字符串。
>>> r"HKEY_LOCAL_MACHINE\Software\MYAPP\6.3".strip("HKEY_LOCAL_MACHINE\\") 'Software\\MYAPP\\6.3'
print repr(keyPath)
OpenKey
编辑:看起来SylvainDefresne正确猜到了字符串末尾的换行符