Python中的Yaml合并

13 投票
1 回答
12683 浏览
提问于 2025-04-15 11:24

我最近在想,想给自己(当然也欢迎其他人使用)做一个小的Python库,专门用于Pygame。我希望这个库能通过一个yaml文件来设置应用程序的参数。

我觉得如果这个库能提供一个默认的yaml结构,并且能把用户提供的yaml和这个默认的合并,那就太好了。为了方便使用,我在想有没有人能帮我想出一个方法,来实现以下功能:

如果用户提供的yaml和默认的yaml有重叠的地方,用户提供的部分就替换掉默认的部分。

如果用户提供的yaml和默认的yaml没有重叠,默认的部分就继续保留。

用户提供的yaml中多余的部分会被添加到最后。

我知道我说得有点啰嗦,大家应该能明白我想要什么。我在想,这样的功能是不是要求有点高,毕竟是想要免费的东西。

1 个回答

22

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

如果需要的话,你可以在调用这个函数之前,对用户的树结构做一个 深拷贝

撰写回答