我有这个YAML:
app_name: my_app
version:
1.0:
path: /my_app/1.0
2.0:
path: /my_app/2.0
是否有可能以某种方式避免输入" my_app"和它的版本,而是通过使用某种引用从YAML本身读取?
我有这样的想法:
app_name: my_app
version:
1.0:
path: /@app_name/$key[-1]
2.0:
path: /@app_name/$key[-1]
最后,我打算将其读入Python词典。
答案 0 :(得分:1)
YAML中没有机制可以对标量的子串进行替换,最好的是锚和别名,它们引用整个标量或集合(映射,序列)。
如果你想做这样的事情,你必须在解析YAML之后进行替换,解释各种值并重建数据结构。
有几个例子(包括[so]在这里)取代,其中YAML的某些部分用作字典来替换其他部分。执行此操作时,您可以解析YAML输入一次,替换源,并重新分析该替换的输出。
因为您使用相对引用,这对您不起作用,您需要在已解析的树中进行替换。
另一种方法是修改解析器以从输入中剥离@
并动态执行此操作。
在这两种情况下,使用相同的令牌(@
)标记一个键来存储"是一个坏主意。它的值(@app_name
),以及标记存储密钥本身的密钥(@1.0
),以及使用相关值(以两种完全不同的方式@app_name
和@key[-1]
)。