首页 > 解决方案 > 修改 YAML 内容

问题描述

我有一个如下所示的 YAML 文件。该文件包含一些特殊字符,如“---”,所以我无法在 python 中使用yaml.load()方法加载 YAML。

_engine: E1
_parameter:
- capacity:
  - updated: 20200825
    dependent: []
---
_engine: E2
_parameter:
- capacity:
  - updated: 20200826
    dependent: [D1,D2]

如何在 python 中更改 YAML 内容,如下所示。它将被封装在一个标签下mainDatastage1等等stage2。每个“---”的意思stage<number value>都会增加。

mainData:
stage1:
_engine: E1
_parameter:
- capacity:
  - updated: 20200825
    dependent: []
stage2:
_engine: E2
_parameter:
- capacity:
  - updated: 20200826
    dependent: [D1,D2]

最后,最终流也将只是 YAML。

标签: pythonyaml

解决方案


---是 YAML 语法的一部分。简而言之,它表示新文档的开始:https ://yaml.org/spec/1.2/spec.html#YAML

从技术上讲,它实际上是“指令结束”行,但如果 YAML 文档不包含任何指令,那么它实际上与“开始新文档”相同。这允许将多个 YAML 文档连接在一起。使用 PyYAML,您可以使用yaml.load_all. 如果您想将“阶段”索引与每个文档相关联,只需执行以下操作:

for stage_num, stage in enumerate(yaml.load_all(fileobj)):
   ...

如果您想将其转换为单个文档,您可以执行类似的操作

stages = {} 
for n, stage in enumerate(yaml.load_all(fileobj)):
    stages[f'stage{n}'] = stage

然后转储stages到 YAML 文件。

但我想明确一点,这些数据也已经有一个有效的结构,所以严格来说不需要修改它。


推荐阅读