我有一个配置文件,其中(故意)包含一些未定义的别名:
base:
foo: *args_foo
bar: *args_bar
fuz: fuz_val
buz: buz_val
同时,我有一个以 --foo 和 --bar 作为参数的 cli,其中 --foo 可以多次指定。我最终得到一个如下所示的字典:
args = {}
args["foo"] = ["foo_val_1", "foo_val_2", "foo_val_3"]
args["bar"] = "bar_val"
我想将参数转储到 yaml,但参数中的每个键都有自定义锚点。如下所示:
args:
foo: &args_foo
- foo_val_1
- foo_val_2
- foo_val_3
bar: &args_bar "bar_val"
我可以编写自己的代码来生成文档,但我更希望以某种方式告诉 ruamel.yaml 在序列化之前添加锚点。问题是,这是否可能,如果可能,如何实现?
目的是将这两个文件连接起来,像这样:
args:
foo: &args_foo
- foo_val_1
- foo_val_2
- foo_val_3
bar: &args_bar "bar_val"
base:
foo: *args_foo
bar: *args_bar
fuz: fuz_val
buz: buz_val
并在加载连接文档后提取“base”作为最终配置。
由于您无法加载配置文件(因为它是无效的 YAML),所以最简单的 IMO 是生成一个带有锚点定义的 YAML 文件并将配置文件附加到其中。
我建议首先往返预期的输出:
其结果为:
然后进行分析
data
,特别是对于需要创建的特殊类型(另请参阅此答案):其结果为:
您的
args
数据结构需要一些详细说明:其结果为:
这
always_dump
是必要的,因为伪锚通常不会被丢弃。现在你可以将以上内容结合起来:
其结果为: