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使用场景也比较广泛,比如:
点个“赞”和“在看”,是对小栈最大的支持!
文章就分享到这儿,喜欢就点个赞吧!