Помогите преобразовать строку

Для доступа к реестру хочу использовать 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 шт):

Автор решения: biomotor

Ответ на вопрос 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)
→ Ссылка
Автор решения: GrAnd

Забить словарь соответствий строк ключам и вытаскивать значения через него.

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)
→ Ссылка