Подтвердить что ты не робот

Yaml объединяется в Python

Итак, я собираюсь с идеей заставить себя (и любого, кто хочет использовать его, конечно) небольшую библиотеку шаблонов в Python для Pygame. Я бы хотел, чтобы система, в которой параметры приложения были снабжены файлом yaml.

Итак, я думал, что было бы полезно, если бы библиотека предоставила дерево yaml по умолчанию и объединила его с предоставленным пользователем. Для удобства использования я задаюсь вопросом, возможно ли, есть ли там люди, которые могут боготворить рутину, где:

В любом случае в дереве, в котором пользователь поставил yaml, перекрывается значение по умолчанию, пользовательские ветки заменяют предоставленные библиотеки.

В любом случае, когда пользователь, предоставленный пользователем yaml, не перекрывает дерево по умолчанию, дерево по умолчанию сохраняется.

Добавляются любые сверхъестественные ветки в дереве, предоставленные пользователем yaml.

Я знаю, что это объяснение было многословным, поскольку, вероятно, я понимаю, о чем я прошу. Интересно, можно ли немного получить бесплатно.

4b9b3361

Ответ 1

Вы можете использовать PyYAML для разбора файлов, а затем следующую функцию для объединения двух деревьев:

def merge(user, default):
    if isinstance(user,dict) and isinstance(default,dict):
        for k,v in default.iteritems():
            if k not in user:
                user[k] = v
            else:
                user[k] = merge(user[k],v)
    return user

По желанию вы можете сделать глубокую копию дерева пользователя перед вызовом этой функции.