我正在从文本文件读取注册表的路径。注册表路径为
HKEY_LOCAL_MACHINE\Software\MYAPP\6.3
我将此注册表存储在一个变量中:
REGISTRY_KEY
然后我从字符串中去掉HKEY\ U LOCAL\ U 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')
或者
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,"Software\\MYAPP\\6.3")
它起作用了。你知道吗
那么有什么方法可以使keyPath变量成为原始字符串或包含双'\'
PS:我正在使用Python3.3
你的
REGISTRY_KEY.strip()
呼叫没有做你认为它在做的事情。它不会从字符串的开头删除字符串HKEY_LOCAL_MACHINE\
。相反,它以任何顺序从字符串的两端删除字符H
、K
、E
。这就是为什么当你手动输入你想要的东西时它会起作用。你知道吗至于原来的问题,双反斜杠是一个转义序列,它在字符串中产生一个反斜杠,因此不必将
keyPath
转换为双斜杠。你知道吗原始str是一种输入字符串的方法,因此不需要转义特殊字符。输入相同str的另一种方法是转义特殊字符(blackslash就是其中之一)。他们会有相同的数据。所以你的问题没有答案。
您还错误地使用了
strip
,但这对于这个特定的字符串来说无关紧要。因为第一个\
后面的第一个字符是S
,并且S
不在strip命令中,并且您的键以数字结尾,也不在strip命令中。但你会想把它修好,这样其他的钥匙就不会被它弄乱了。你在这根绳子上很幸运。OpenKey
之前,请尝试print repr(keyPath)
编辑:看起来SylvainDefresne正确地猜测了字符串末尾的换行符
相关问题 更多 >
编程相关推荐