如何使用PyYAML将另一个YAML包含为全局基文件

如何使用PyYAML将另一个YAML包含为全局基文件,yaml,pyyaml,Yaml,Pyyaml,我将YAML用作配置引擎,我需要以这样一种方式使用它:我可以以分层方式拆分配置,比如我有一个base.YAML,其中包含一些默认值,然后是一个覆盖基本值的overrided.YAML文件: base.yaml value: base !include base.yaml value: overridden 被覆盖。yaml value: base !include base.yaml value: overridden 最后,如果加载overrided.yaml文件,理想情况下,我希

我将YAML用作配置引擎,我需要以这样一种方式使用它:我可以以分层方式拆分配置,比如我有一个base.YAML,其中包含一些默认值,然后是一个覆盖基本值的overrided.YAML文件:

base.yaml

value: base
!include base.yaml

value: overridden
被覆盖。yaml

value: base
!include base.yaml

value: overridden
最后,如果加载overrided.yaml文件,理想情况下,我希望将值设置为“overrided”

我可以使用它来包含另一个YAML文件,但仍然缺少一个部分,即它不允许我在全局包含之后定义更多条目,并出现以下错误:

yaml.scanner.ScannerError: mapping values are not allowed here

我正在使用PyYAML加载YAML文件。

这不起作用的原因是您的
!include
创建单个节点,因为YAML标记应用于单个节点。这与覆盖
的.yaml类似:

"some string"
value: overridden
- &base !include base.yaml
- <<: *base
  value: overridden
这也是无效的YAML

所以它不像
!include
将插入文本版本,然后处理整个过程。您可以使用预处理器和/或模板语言来实现这一点,但最终会得到一个无效的YAML文件,因为根据YAML 1.2标准,映射中的键必须是唯一的,甚至是PyYAML支持的过时键。(然而,这并不能阻止PyYAML在没有警告的情况下加载它)

您应该看到的是将与include结合使用。您的
base.yaml
可以看起来相同,您的
被覆盖。yaml
可以看起来像:

"some string"
value: overridden
- &base !include base.yaml
- <<: *base
  value: overridden
-&base!包括base.yaml

-你链接到一个问题。公认的答案是YAML没有导入/包含语句。请编辑您的问题并链接到您实际使用的10个答案中的一个。或者更好:在这里包含您的实际代码。