Python 3.x 如何读取Windows注册表文件以检查值?[Python]

Python 3.x 如何读取Windows注册表文件以检查值?[Python],python-3.x,windows,registry,Python 3.x,Windows,Registry,我正在尝试对Windows注册表文件(.reg文件,脱机)执行审核检查,我希望可以利用Python对reg文件执行检查 例如(伪代码): 我试过查看winreg,但它似乎在使用Windows API的实时系统上进行检查。另一个问题是.reg文件太大(~200MB) 如何使用Python执行这样的检查?我不知道是否有一个lib可以专门读取.reg文件,但从它看起来,它只是一个INI文件,顶部有一个额外的版本信息 下面是一个示例,说明如何使用configparser模块实现此目的。一些注意事项:

我正在尝试对Windows注册表文件(.reg文件,脱机)执行审核检查,我希望可以利用Python对reg文件执行检查

例如(伪代码):

我试过查看winreg,但它似乎在使用Windows API的实时系统上进行检查。另一个问题是.reg文件太大(~200MB)


如何使用Python执行这样的检查?

我不知道是否有一个lib可以专门读取.reg文件,但从它看起来,它只是一个INI文件,顶部有一个额外的版本信息

下面是一个示例,说明如何使用
configparser
模块实现此目的。一些注意事项:

  • .reg文件以utf16编码
  • 在将文件提供给
    ConfigParser
    之前,
    readline
    将跳过版本信息(类似于
    Windows注册表编辑器版本5.00
    )。否则将导致
    丢失SectionHeaderError
  • 值的名称包括引号,这意味着您需要在键中查找值时显式添加它们


这样做可能会有一些缺点,例如,您获取的值是如何格式化的。

我不知道是否有一个lib可以专门读取.reg文件,但从外观上看,它只是一个INI文件,顶部有一个额外的版本信息

下面是一个示例,说明如何使用
configparser
模块实现此目的。一些注意事项:

  • .reg文件以utf16编码
  • 在将文件提供给
    ConfigParser
    之前,
    readline
    将跳过版本信息(类似于
    Windows注册表编辑器版本5.00
    )。否则将导致
    丢失SectionHeaderError
  • 值的名称包括引号,这意味着您需要在键中查找值时显式添加它们


但是,这样做可能会有一些缺点,例如,您获取的值的格式。

谢谢您的回复。似乎我无法使用上面的代码读取注册表。我收到一个Unicode错误。将编码更改为“utf-16le”修复了此问题,但我收到了一个密钥错误。好的,那么根据Windows版本的不同,*.reg文件的外观可能会有所不同(我使用的是win7)。你能找到你想要找到的关键部分并把它添加到你的问题中吗?谢谢你的回答。似乎我无法使用上面的代码读取注册表。我收到一个Unicode错误。将编码更改为“utf-16le”修复了此问题,但我收到了一个密钥错误。好的,那么根据Windows版本的不同,*.reg文件的外观可能会有所不同(我使用的是win7)。你能查一下你想找到的关键部分并把它添加到你的问题中吗?
#Configure registry policy processing: Do not apply during periodic background processing 

testloc = "C:\\Users\\test.reg"
datafile = open(testloc, "r")
read = datafile.read()

find(Software\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2})
check(NoBackgroundPolicy) #check if dword value is correct

if(dword == correct):
    print("correct")
else:
    print("wrong")
import configparser

testloc = "C:\\Users\\test.reg"

regdata = configparser.ConfigParser()
with open(testloc, "r", encoding="utf-16") as f:
    f.readline()  # skip version info in first line
    regdata.read_file(f)

key = regdata[r"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}"]
value = key['"NoBackgroundPolicy"']

print(value)