Yaml слиться в Python - PullRequest
13 голосов
/ 05 мая 2009

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

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

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

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

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

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

1 Ответ

21 голосов
/ 05 мая 2009

Вы можете использовать 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...