什么是yaml格式?
YAML(YAML Ain't Markup Language)是一种简洁的非标记语言,用于数据序列化和存储。它以易读性、可扩展性和灵活性为特点,常用于配置文件、数据交换等场景。
YAML文件使用缩进表示层次结构,而不是像HTML或XML那样使用标签。这使得YAML文件更加易于阅读和编写。YAML还支持注释、锚点和别名等功能,使其更加强大和灵活。
YAML文件的基本结构包括键值对、列表和嵌套结构。例如:
# 注释
name: John Doe
age: 30
city: New York
# 列表
hobbies:
- reading
- writing
- coding
# 嵌套结构
address:
street: 123 Main St
city: Anytown
state: CA
zip: 12345
YAML Ain’t Markup Language (YAML™) Version 1.1
第三方库PyYaml
https://pyyaml.org/wiki/PyYAMLDocumentation
安装PyYaml
pip install PyYAML
PyYaml常用方法
以下是一些常用的方法如下:
yaml.load()
函数
从文件中加载YAML数据。
import yaml
with open('example.yaml', 'r', encoding='utf-8') as file:
data = yaml.load(file, Loader=yaml.FullLoader)
print(data)
yaml.dump()
函数
dump(data, stream=None, Dumper=Dumper,
default_style=None,
default_flow_style=None,
encoding='utf-8', # encoding=None (Python 3)
explicit_start=None,
explicit_end=None,
version=None,
tags=None,
canonical=None,
indent=None,
width=None,
allow_unicode=None,
line_break=None)
将Python对象转换为YAML格式的字符串,并将其写入文件。
import yaml
data = {
'name': '张三',
'age': 30,
'hobbies': ['阅读', '写作', '编程']
}
with open('output.yaml', 'w', encoding='utf-8') as file:
yaml.dump(data, file, default_flow_style=True, allow_unicode=True)
yaml.safe_load()
函数
从文件中安全地加载YAML数据。
import yaml
with open('example.yaml', 'r', encoding='utf-8') as file:
data = yaml.safe_load(file)
print(data)
yaml.safe_dump()
函数
将Python对象转换为YAML格式的字符串,并将其写入文件。
import yaml
data = {
'name': '张三',
'age': 30,
'hobbies': ['阅读', '写作', '编程']
}
with open('output.yaml', 'w', encoding='utf-8') as file:
yaml.safe_dump(data, file, default_flow_style=False, allow_unicode=True)
yaml.load_all()
函数
从文件中加载所有YAML数据。
import yaml
with open('output.yaml', 'r', encoding='utf-8') as file:
data = list(yaml.load_all(file, Loader=yaml.FullLoader))
print(data)
使用案例
读取,修改和保存yaml文件
import yaml
# 读取YAML文件
with open("example.yaml", "r", encoding="utf-8") as file:
data = yaml.safe_load(file)
print(data)
# 修改YAML文件内容
data["key"] = "new_value"
# 将修改后的内容写回YAML文件
with open("example.yaml", "w", encoding="utf-8") as file:
yaml.safe_dump(data, file, default_flow_style=False, allow_unicode=True)
这里的example.yaml
是一个简单的YAML文件,内容如下:
name: John Doe
age: 30
city: New York
代码首先读取YAML文件并将其内容解析为Python字典。然后,它修改字典中的一个值,并将修改后的字典写回YAML文件。
创建一个新的yaml文件
import yaml
# 创建一个字典对象
data = {
'name': '张三',
'age': 30,
'hobbies': ['阅读', '写作', '编程']
}
# 将字典对象转换为YAML格式的字符串
yaml_str = yaml.dump(data, allow_unicode=True)
# 以写入模式打开一个新的YAML文件
with open('output.yaml', 'w', encoding='utf-8') as file:
# 将YAML格式的字符串写入文件
file.write(yaml_str)
这段代码将创建一个名为output.yaml
的新文件,并将字典data
的内容以YAML格式写入该文件。
age: 30
hobbies:
- 阅读
- 写作
- 编程
name: 张三
输出结果并不是按照字典key出现的先后顺序,而是按照key进行升序排序。
使用体验
使用PyYaml操作yaml文件非常简单,但是保存的时候,似乎无法控制key的顺序。
如果要实现自定义key的顺序,根据文档
https://pyyaml.org/wiki/PyYAMLDocumentation
可以通过自定义自己的python实体对象来实现,等后续有需要了,在尝试一下。