Помогите преобразовать строку
Для доступа к реестру хочу использовать winreg.
пример из интернета:
Winreg(winreg.HKEY_CURRENT_USER, r"SOFTWARE\\RegTest\\test1")
я хочу использовать приблизительно такую функцию:
def addreg(r'HKEY_CURRENT_USER\\SOFTWARE\\RegTest\\test1')
Вопрос 1: Как вырезать из строки HKEY_CURRENT_USER ?
Вопрос 2: Есть ли в функционале python функция преобразующая строку 'HKEY_CURRENT_USER' в ссылку winreg.HKEY_CURRENT_USER?
(нехочется писать if ... Winreg(winreg...) 5 раз для каждого раздела реестра)
Ответы (2 шт):
Ответ на вопрос 1: (Цикл ищет каждое значение из списка keys в строке str, если нашел присваивает значение key и переопределяет строку str с вырезанным значением key.)
str = "HKEY_CURRENT_USER\\SOFTWARE\\RegTest\\test1"
key = None
keys = {'HKEY_CLASSES_ROOT',
'HKEY_CURRENT_USER',
'HKEY_LOCAL_MACHINE',
'HKEY_USERS',
'HKEY_CURRENT_CONFIG'}
for i in keys:
k = str.find(i)
if k != -1:
key = i
str = str.replace(key, '')
if key == None:
print('Error: key not found in str!')
print(key, str)
Забить словарь соответствий строк ключам и вытаскивать значения через него.
import winreg
keys_map = {
"HKEY_CLASSES_ROOT" : winreg.HKEY_CLASSES_ROOT ,
"HKEY_CURRENT_USER" : winreg.HKEY_CURRENT_USER ,
"HKEY_LOCAL_MACHINE" : winreg.HKEY_LOCAL_MACHINE ,
"HKEY_USERS" : winreg.HKEY_USERS ,
"HKEY_PERFORMANCE_DATA" : winreg.HKEY_PERFORMANCE_DATA,
"HKEY_CURRENT_CONFIG" : winreg.HKEY_CURRENT_CONFIG
}
def str2key(fullkey):
root, subkey = fullkey.split(r"\\", 1)
if root in keys_map:
return (keys_map[root], subkey)
print(f"Unknown root key '{root}'")
print(str2key(r'HKEY_CURRENT_USER\\SOFTWARE\\RegTest\\test1'))
print(str2key(r'WTF\\SOFTWARE\\RegTest\\test2'))
(18446744071562067969, 'SOFTWARE\\\\RegTest\\\\test1')
Unknown root key 'WTF'
None
Ну а дальше можно подстановкой через звёздочку, а можно ручками через переменные.
Winreg(*str2key(r'HKEY_CURRENT_USER\\SOFTWARE\\RegTest\\test1'))
# или
key, subkey = str2key(r'HKEY_CURRENT_USER\\SOFTWARE\\RegTest\\test1')
Winreg(key, subkey)