我有一个YAML文件,它看起来像下面的
test:
- exam.com
- exam1.com
- exam2.com
test2:
- examp.com
- examp1.com
- examp2.com
我喜欢使用python管理这个文件。 任务是,我想在" test2"下添加一个条目。并删除" test"。
中的条目答案 0 :(得分:0)
首先必须加载数据,这将为您提供顶级dict(在以下示例中名为data
的变量中),键的值将是列表。在这些列表中,您可以执行del
resp。 insert()
(或append()
)
import sys
import ruamel.yaml
yaml_str = """\
test:
- exam.com
- exam1.com
- exam2.com
test2:
- examp.com
- examp1.com # want to insert after this
- examp2.com
"""
data = ruamel.yaml.round_trip_load(yaml_str)
del data['test'][1]
data['test2'].insert(2, 'examp1.5')
ruamel.yaml.round_trip_dump(data, sys.stdout, block_seq_indent=1)
给出:
test:
- exam.com
- exam2.com
test2:
- examp.com
- examp1.com # want to insert after this
- examp1.5
- examp2.com
block_seq_indent=1
是必要的,因为默认情况下ruamel.yaml
会将序列值与键对齐.¹
如果你想删除输出中的注释,你可以这样做:
data['test2']._yaml_comment = None
¹这是使用ruamel.yaml YAML 1.2解析器完成的,我是作者。