Цикл через значения или раздел реестра.. winreg в языке Python
Как бы я прошел через все на значения раздела реестра Windows с использованием модуля Python _winreg. У меня есть код, который будет делать то, что я хочу, но это для подразделов указанного раздела реестра.
Вот Код:
from _winreg import *
t = OpenKey(HKEY_CURRENT_USER, r"PATH TO KEY", 0, KEY_ALL_ACCESS)
try:
i = 0
while True:
subkey = EnumValue(t, i)
print subkey
i += 1
except WindowsError:
# WindowsError: [Errno 259] No more data is available
pass
О, понял. Но, если кто-нибудь знает другой способ сделать это, я все-таки приму этот ответ!
3 ответов
не должно EnumValue быть здесь
# list all values for a key
try:
count = 0
while 1:
name, value, type = _winreg.EnumValue(t, count)
print repr(name),
count = count + 1
except WindowsError:
pass
предпочитаю избежать ошибки, вместо того, чтобы нырять прямо в него ...
использовать _winreg.QueryInfoKey чтобы получить количество значений:
import _winreg
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'PATH\TO\KEY', 0, _winreg.KEY_READ)
for i in xrange(0, _winreg.QueryInfoKey(key)[1]):
print _winreg.EnumValue(key, i)
чтобы получить количество ключей, тот же метод, другой индекс (вторая половина исходного вопроса):
for i in xrange(0, _winreg.QueryInfoKey(key)[0]):
print _winreg.EnumKey(key, i)
Примечание: использовать import
вместо from ... import
чтобы сделать его явным, откуда берутся функции и переменные. Делает его легче следовать код позже жизнь.
для перебора ключей и значений реестра, вам понадобится EnumKey()
и EnumVlaue()
метод _winreg
модуль. Обратите внимание, что эти два метода принимают index в качестве аргумента и предоставляют вам ключ (или значение) только для данного индекса. Поэтому, чтобы получить все ключи( или значения), вам нужно увеличить индекс на один и продолжить до WindowsError
не сталкивался.
этот пост может помочь вам для подробного понимания того же. Этот Ссылку на GitHub для кода можно найти в сообщении.