使用 python 更新和删除 YAML 文件?

Posted

技术标签:

【中文标题】使用 python 更新和删除 YAML 文件?【英文标题】:YAML file update and delete using python? 【发布时间】:2017-01-03 04:39:12 【问题描述】:

我有一个 YAML 文件,如下所示

test:
 - exam.com
 - exam1.com
 - exam2.com
test2:
 - examp.com
 - examp1.com
 - examp2.com

我喜欢使用 python 来管理这个文件。 任务是,我喜欢在“test2”下添加一个条目,并从“test”中删除条目。

【问题讨论】:

使用 yaml 库将数据加载到 python 字典中。添加/删除就像从常规 python 字典/列表中一样。写入原文件 ***.com/questions/28557626/…的可能重复 【参考方案1】:

您首先必须加载数据,这将为您提供***字典(在以下示例中名为 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 解析器完成的,我是它的作者。

【讨论】:

以上是关于使用 python 更新和删除 YAML 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Yaml值在python 3中不可迭代

使用 Python 更改 yaml 文件中的值

从yaml文件读取配置,然后修改配置,怎样更新到yaml文件

如何在 kubernetes 中使用 yaml 文件删除和重新创建 pod

k8s常用命令

python笔记74- yaml 使用特殊符号| 解决字符串带换行的问题