如何解决修改YAML内容
我有一个如下所示的YAML文件。该文件包含一些特殊字符,例如“ ---”,因此我无法使用yaml.load()
方法在python中加载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文件。
但是我想清楚一点,即该数据也已经具有有效的结构,因此完全不需要修改它。
,这应该做
import itertools
with open('/path/to/input.yml') as infile,open('/path/to/output.yml','w') as outfile:
outfile.write("mainData:\n")
stage = itertools.count(1)
for line in infile:
if not line.startswith('---'):
outfile.write(line)
continue
outfile.write(f"stage{next(stage)}:\n")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。