python - 修改 YAML 内容
问题描述
我有一个如下所示的 YAML 文件。该文件包含一些特殊字符,如“---”,所以我无法在 python 中使用yaml.load()
方法加载 YAML。
_engine: E1
_parameter:
- capacity:
- updated: 20200825
dependent: []
---
_engine: E2
_parameter:
- capacity:
- updated: 20200826
dependent: [D1,D2]
如何在 python 中更改 YAML 内容,如下所示。它将被封装在一个标签下mainData
,stage1
等等stage2
。每个“---”的意思stage<number value>
都会增加。
mainData:
stage1:
_engine: E1
_parameter:
- capacity:
- updated: 20200825
dependent: []
stage2:
_engine: E2
_parameter:
- capacity:
- updated: 20200826
dependent: [D1,D2]
最后,最终流也将只是 YAML。
解决方案
这---
是 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 文件。
但我想明确一点,这些数据也已经有一个有效的结构,所以严格来说不需要修改它。
推荐阅读
- angular - 使用带有 routerLink 的“a”标签时传递输入
- recursion - 我们应该使用哪种类型的递归?(讨论)
- python-3.x - 如何在 PyQt5 应用程序中使用 Mutagen 显示专辑封面?
- python - 用于创建和显示排名表的 Python 代码
- c - I have a function that has int a and int b all I have to do is find the max value
- python - 如何在python中制作计时器而不冻结整个代码
- reactjs - 在后端和前端并行的 dockerfile 中运行 nginx
- android - how to center a view in a constraint layout 1.0
- python - TypeError: 'NoneType' object is not iterable issue. how do i manage to bypass null statements?
- android - 如何从 mp3 数组播放音频 [Android]