Python对yaml文件的增删改查操作

文摘   科技   2024-05-03 20:20   北京  

ISEE小语


“往事如烟,像是看过一场电影,听过的一支歌,逛过的名胜,过去便是过去,无凭无据。”

——亦舒




    Yaml文件是一种直观的能够被电脑识别的数据序列化格式,同时也易于人类阅读。它常用于配置文件、数据交换以及在应用程序中存储属性。



环境:

Pycharm

Python 3.9.16



安装:

pip install PyYAML==6.0.1




新建yaml文件并写入

创建yaml_write.py文件

# -*- coding: utf-8 -*-import yaml
# 创建要写入的数据data = { 'key': 'value', 'list': [1, 2, 3], 'nested': { 'subkey1': 'subvalue1', 'subkey2': 'subvalue2' }}
# 写入YAML文件with open('example.yaml', 'w') as outfile: yaml.dump(data, outfile, default_flow_style=False)

(左右滑动查看完整代码)

结果:

直接运行以上代码,可以看到在当前文件夹下自动生成了example.yaml文件



读取yaml文件

创建yaml_read.py文件,将以上生成的yaml文件内容读取出来

# -*- coding: utf-8 -*-import yaml
# 读取YAML文件with open('example.yaml', 'r') as stream: try: data = yaml.safe_load(stream) print(data) # 打印读取的数据 except yaml.YAMLError as exc: print(exc) # 打印异常信息

(左右滑动查看完整代码)

结果为 :

可以看到这是读取出来是一个字典,这个后面使用会非常方便


修改yaml文件

修改yaml文件,就是将文件内容读取出来,修改数据后,再次写入。

示例:将原来key的value换成new_value,并在data列表中添加数据4

# -*- coding: utf-8 -*-import yaml
# 读取原始YAML文件with open('example.yaml', 'r') as file: data = yaml.safe_load(file)
# 修改数据data['key'] = 'new_value'data['list'].append(4)
# 写回修改后的数据到YAML文件with open('example.yaml', 'w') as file: yaml.dump(data, file, default_flow_style=False)

(左右滑动查看完整代码)

结果:



删除yaml指定内容

删除yaml文件指定内容,与修改同理,就是将文件内容读取出来,删除指定的数据后,再次写入

示例:假设我们想删除键为'subkey1'的内容

# -*- coding: utf-8 -*-import yaml
# 读取YAML文件with open('example.yaml', 'r') as file: data = yaml.safe_load(file)
# 假设我们想删除键为'subkey1'的内容key_to_delete = 'subkey1'if key_to_delete in data['nested']: del data['nested'][key_to_delete]
# 将修改后的数据写回到YAML文件with open('example.yaml', 'w') as file: yaml.dump(data, file, default_flow_style=False)

以上删除操作是知道'subkey1'是在'nested'下,如果我们不确定嵌套层次或存在性,但需要删除'subkey1',你可以递归地遍历数据结构.

# -*- coding: utf-8 -*-import yaml

def remove_key_recursive(d, target_key): if isinstance(d, dict): # 如果当前键是目标键,则删除它 d.pop(target_key, None) # 递归地对字典中的每个值进行操作 for k, v in list(d.items()): remove_key_recursive(v, target_key) elif isinstance(d, list): # 如果是列表,则对列表中的每个项进行递归操作 for item in d: remove_key_recursive(item, target_key)

# 读取YAML文件with open('example.yaml', 'r') as file: data = yaml.safe_load(file)
# 递归地删除所有实例的'subkey1'remove_key_recursive(data, 'subkey1')
# 将修改后的数据写回文件with open('example.yaml', 'w') as file: yaml.dump(data, file, default_flow_style=False)

注意:这种删除方式,yaml文件中尽量不要有重复的key,否则都会将其删除。

最终效果是:



总结

YAML使用场景也比较广泛,比如:

-配置文件:YAML常见于软件项目的配置文件。例如,Docker的docker-compose.yml和Kubernetes的配置文件。
-数据存储:对于需要持久化但数据库过于复杂的场景,YAML可以作为存储轻量级数据的选择。
-数据交换:由于YAML是可读性很强的数据格式,它经常被用来在不同系统间交换数据。
-编排脚本:在自动化和DevOps场景中,YAML经常被用于编写编排脚本,如Ansible Playbooks。
-文档标记::在某些文档生成工具中,YAML用于标记文档元数据。




点个“”和“在看”,是对小栈最大的支持!

     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章