显式地将字符串转换为原始字符串

2024-05-28 23:56:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: key字符串路径注册表localsoftwaremachinemyapp
2条回答

你的REGISTRY_KEY.strip()呼叫没有做你认为它在做的事情。它不会从字符串的开头删除字符串HKEY_LOCAL_MACHINE\。相反,它以任何顺序从字符串的两端删除字符HKE。这就是为什么当你手动输入你想要的东西时它会起作用。你知道吗

至于原来的问题,双反斜杠是一个转义序列,它在字符串中产生一个反斜杠,因此不必将keyPath转换为双斜杠。你知道吗

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

  • 您还错误地使用了strip,但这对于这个特定的字符串来说无关紧要。因为第一个\后面的第一个字符是S,并且S不在strip命令中,并且您的键以数字结尾,也不在strip命令中。但你会想把它修好,这样其他的钥匙就不会被它弄乱了。你在这根绳子上很幸运。

>>> r"HKEY_LOCAL_MACHINE\Software\MYAPP\6.3".strip("HKEY_LOCAL_MACHINE\\")
'Software\\MYAPP\\6.3'
  • 至于你真正的问题。这根弦还有别的地方不对。在呼叫OpenKey之前,请尝试print repr(keyPath)

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

相关问题 更多 >

    热门问题