PyYAML自定义yaml处理
问题描述:
我想用一些自定义宏来扩展YAML,这样我就可以在同一个文件中“重用”部分定义。示例:PyYAML自定义yaml处理
DEFAULTS:
- a
- b
- c
CUSTOM1:
- %DEFAULTS
- d
CUSTOM2:
- %DEFAULTS
- e
导致
CUSTOM1==['a','b','c','d']
CUSTOM2==['a','b','c','e']
不必是完全相同的语法,只要我能得到相同的功能出来。我有什么选择?
P.S. 我意识到可以在解析并重新调整值之后再行走字典,但是我想在加载时执行此操作。
答
YAML规范中没有选项。唯一接近的是merge syntax,但这是合并映射,不适用于序列。
如果不能切换到您的环境中使用的映射(并使用<<
合并),最彻底的方法,国际海事组织,实现这个是使CUSTOM1
价值观和CUSTOM2
特定类型,例如expander
:
CUSTOM1: !expander
- %DEFAULTS
- d
映射到该解释第一序列元件为可替换的值当它与%
开始对象。
我在想PyYAML API钩子的问题,但是代码没有很好的记录,因此我不知道哪些项目会被覆盖并产生什么效果。 – Droopy4096
@ Droopy4096如果您希望标准YAML映射的行为不同,并且您不希望后处理序列,那么在解析器中这样做是唯一的选择。但PyYAML(和我的衍生物[ruamel.yaml](https://pypi.python.org/pypi/ruamel.yaml)theparser的工作方式是他们没有* context *来访问如果你想使用默认映射(尽管我知道PyYAML内部结构很好),我会去后处理。 – Anthon