Pythonic对象化访问Windows注册表。
项目描述
regobj: Pythonic对象化访问Windows注册表
此模块围绕标准_winreg模块提供了一个薄包装器,允许更简单、更Pythonic地访问Windows注册表。
所有对注册表的访问都是通过Key对象完成的,这些对象(惊喜!)代表特定的注册表键。首先,已经为HKEY_*根键定义了预存在的Key对象,使用长名和短名
>>> 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")
可以通过标准项访问语法访问键中包含的个别值。返回的对象将是Value类的实例,具有‘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"]
这些迭代器还提供了高效的__contains__和__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
就这样了 - 祝您享受!
项目详情
关闭
regobj-0.2.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6be8ba286a7f5c63cfe3ff27ef7247a02caa4c31c6de1b6e0ee64c5cb47fc5ce |
|
MD5 | 9434d2d42dfda5212bd3684bea04e970 |
|
BLAKE2b-256 | 3bd34718afcfef17488d46c62f9abb3df920f0c3421ce938bbc6e3fc78fa18a9 |