Yaml在Python中合并

时间:2009-05-05 03:31:42

标签: python configuration yaml

因此,我正在考虑让自己(以及任何关心使用它的人当然)在Python中用于Pygame的一个小样板文库。我想要一个系统,其中应用程序的设置与yaml文件一起提供。

所以我认为如果库提供了一个默认的yaml树并将其与用户提供的树合并,那将会很有用。出于可用性的考虑,我想知道是否有可能在那里有一个例程:

在任何情况下,在用户提供yaml的树中重叠默认值,用户提供的分支将替换库提供的分支。

在用户提供的yaml与默认树不重叠的任何情况下,默认树都会保留。

附加了由用户提供的yaml提供的树中的任何超级分支。

我知道这个解释很冗长,因为很清楚我要求的是什么。我想知道免费获得是否有点多。

1 个答案:

答案 0 :(得分:21)

您可以使用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

可选地,您可以在调用此函数之前执行用户树的deep-copy