对windows注册表的基于pythonic对象的访问。
regobj的Python项目详细描述
regobj:对Windows注册表的基于Pythonic对象的访问
此模块为标准的winreg模块提供了一个薄包装, 允许对Windows注册表进行更简单和更具pythonic性的访问
对注册表的所有访问都是通过键对象完成的,这(令人惊讶!) 表示特定的注册表项。首先,存在预先存在的密钥。 为hkey根键定义的对象,使用长名称和短名称:
>>> HKEY_CURRENT_USER <regobj Key 'HKEY_CURRENT_USER'> >>> HKLM <regobj Key 'HKEY_LOCAL_MACHINE'>
然后遍历和创建子键就像普通的python一样简单 属性访问:
>>> HKCU.Software.Microsoft.Windows <regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows'> >>> HKCU.Software.MyTests Traceback (most recent call last): ... AttributeError: subkey 'MyTests' does not exist >>> HKCU.Software.MyTests = Key >>> HKCU.Software.MyTests <regobj Key 'HKEY_CURRENT_USER\Software\MyTests'> >>> del HKCU.Software.MyTests
当然,对于没有像python标识符那样命名的键, 也有方法可以完成同样的事情。帮助减少 视觉混乱,调用键对象是属性查找的简写:
>>> HKCU.Software.set_subkey("my-funny-key",Key) >>> HKCU.Software.get_subkey("my-funny-key").SubKey = Key >>> HKCU("Software\my-funny-key\SubKey") <regobj Key 'HKEY_CURRENT_USER\Software\my-funny-key\SubKey'> >>> HKCU.Software.del_subkey("my-funny-key")
可以使用标准 项访问语法。返回的对象将是该值的实例 类,具有“name”、“type”和“data”属性:
>>> HKCU.Software.Microsoft.Clock["iFormat"] <regobj Value (iFormat,1,REG_SZ)> >>> HKCU.Software.Microsoft.Clock["iFormat"].name 'iFormat' >>> print(HKCU.Software.Microsoft.Clock["iFormat"].data) 1 >>> print(type(HKCU.Software.Microsoft.Clock["iFormat"].data) is type(b'1'.decode('utf8'))) True >>> HKCU.Software.Microsoft.Clock["iFormat"].type 1 >>> HKCU.Software.Microsoft.Clock["notavalue"] Traceback (most recent call last): ... KeyError: "no such value: 'notavalue'"
对键进行迭代将生成所有包含的值,然后 所有包含的子键。还有一些方法可以单独迭代 除了值,还有子键:
>>> winK = HKCU.Software.Microsoft.Windows >>> winK["testvalue"] = 42 >>> for obj in winK: ... print(obj) <regobj Value (testvalue,42,REG_DWORD)> <regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion'> <regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell'> <regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam'> >>> [k.name for k in winK.subkeys()] ['CurrentVersion', 'Shell', 'ShellNoRoam'] >>> [v.data for v in winK.values()] [42] >>> del winK["testvalue"]
这些迭代器还提供了__ 和“len”方法,因此它们可以使用如下:
>>> "Shell" in HKCU.Software.Microsoft.Windows True >>> "Shell" in HKCU.Software.Microsoft.Windows.subkeys() True >>> "Shell" in HKCU.Software.Microsoft.Windows.values() False >>> len(HKCU.Software.Microsoft.Windows) 3 >>> len(HKCU.Software.Microsoft.Windows.values()) 0
最后,有强大的支持来指定键和值结构 在创造的时候。最简单的例子已经被证明了 将子项设置为key类或none将在没有任何数据的情况下创建它:
>>> HKCU.Software.MyTests = None >>> len(HKCU.Software.MyTests) 0
如果子密钥被分配了一个现有的密钥对象,则该密钥的数据是 复制到子项中:
>>> HKCU.Software.MyTests = HKCU.Software.Microsoft.Windows >>> len(HKCU.Software.MyTests) 3 >>> [k.name for k in HKCU.Software.MyTests] ['CurrentVersion', 'Shell', 'ShellNoRoam'] >>> del HKCU.Software.MyTests
如果为子键分配了字典,则该字典的结构为 复制到子项中标量值成为键值,而嵌套 字典创建子键:
>>> HKCU.Software.MyTests = {"val1":7, "stuff":{"a":1,"c":2,"e":3}} >>> len(HKCU.Software.MyTests) 2 >>> [v.name for v in HKCU.Software.MyTests.values()] ['val1'] >>> [k.name for k in HKCU.Software.MyTests.subkeys()] ['stuff'] >>> len(HKCU.Software.MyTests.stuff) 3 >>> del HKCU.Software.MyTests
分配给子项的任何其他值都将成为 该键(即名为“”的值):
>>> HKCU.Software.MyTests = "dead parrot" >>> print(HKCU.Software.MyTests[""].data) dead parrot >>> print(type(HKCU.Software.MyTests[""].data) is type(b'dead parrot'.decode('utf8'))) True >>> del HKCU.Software.MyTests
就这样-享受吧!