【问题标题】:Explicitly make a string into raw string显式将字符串转换为原始字符串
【发布时间】:2014-02-27 21:24:03
【问题描述】:

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

HKEY_LOCAL_MACHINE\软件\MYAPP\6.3

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

REGISTRY_KEY

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

如果 REGISTRY_KEY.split('\\')[0] == "HKEY_LOCAL_MACHINE": keyPath = REGISTRY_KEY.strip("HKEY_LOCAL_MACHINE\\") 尝试: 键 = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keyPath) value = winreg.QueryValueEx(key, "InstallPath")[0] 除了 IOError 作为错误: 打印(错误)

我收到以下错误

[WinError 2] 系统找不到指定的文件

但是,如果我像手动操作

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

键 = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,"软件\\MYAPP\\6.3")

它有效。

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

PS:我使用的是 Python 3.3

【问题讨论】:

  • 在 OpenKey 中使用 keyPath 之前是什么(尝试打印)
  • "raw" 字符串和转义斜杠仅用于文字输入字符串。字符串本身也不存储。
  • 您从文件中读取的字符串是否可能包含换行符?您可以尝试在调用OpenKey 时使用keyPath.strip() 吗?
  • @SylvainDefresne 它起作用了......从昨天开始我就一直在摸索它

标签: python python-3.x


【解决方案1】:
  • 原始 str 是一种输入字符串的方式,因此您无需转义特殊字符。输入相同 str 的另一种方法是转义特殊字符(黑斜线就是其中之一)。他们将拥有相同的数据。所以你的问题真的没有答案。

  • 您也错误地使用了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 猜对了字符串末尾的换行符

【讨论】:

    【解决方案2】:

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

    至于您最初的问题,双反斜杠是在字符串中产生单个反斜杠的转义序列,因此无需将 keyPath 转换为双斜杠。

    【讨论】:

    • 他用错了,但在这种情况下不是问题
    • 嗯,这就是为什么keyPath找不到的原因,那是因为他的制作不正确。
    • 好问题,没有足够的信息来回答。也许它读错了。无论如何,请尝试使用 strip 命令。
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2018-04-26
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多