1. YAML简介
YAML(YAML Ain't Markup Language, 即YAML不是一种标记语言)是一种高可读性的数据序列化语言,可以被大多数编程语言支持使用,主要用于数据序列化、配置文件。
数据序列化:可以高效的表示或描述数据及数据关系的,以便用于存储和传输。
优点:
(1)语法简单
(2)结构清晰,易于阅读
(3)功能丰富,可以描述比JSON更加复杂的结构
YAML可以看做是精简版的JSON:
![](https://img-blog.csdnimg.cn/direct/7f43114a2e4743eeb6443eef31c45a93.png)
同样的数据序列表示,YAML相较于JSON,少了{}和"",所以更加精简。
YAML可以加注释,JSON不可以加注释。
2.YAML基本语法
2.1 大小写敏感
name键和Name键表示两个不同的键
2.2 使用缩进表示层级关系
2.3 缩进不允许使用tab,只允许空格
2.4 缩进的空格数不重要,只要相同层级的元素左对齐即可
2.5 #表示注释
3. YAML的数据类型
3.1 对象
对象:键值对的集合,又称为映射(mapping),对应JSON中的属性。
3.2 数组
数组:一组有序的值,又称为列表。
写法一:
注意 - 后面有一个空格
写法二:
3.3 纯量
纯量:单个的,不可再分的值,比如整数、浮点数、布尔值等基本数据类型,以及字符串都属于纯量
4. 锚点和引用
重复的内容在YAML中可以使用&来定义锚点,使用*来引用锚点。
参考链接:YAML简介_哔哩哔哩_bilibili
5.Python中读YAML文件和写YAML文件
5.1 python读取YAML文件——yaml.load
现有路径"configs/jta_all_visual_cues.yaml"下YAML文件:
读取YAML文件,并将其转换为Python的dic字典格式
import yaml
with open("configs/jta_all_visual_cues.yaml", "rt") as reader:
config = yaml.load(reader, Loader=yaml.Loader)
print(config)
print(type(config))
print(config["SEED"])
print(config["TRAIN"]["batch_size"])
得到:
5.2 python写进YAML文件——yaml.dump
现有一个空的文件demo.yaml
import yaml
"""读取YAML文件,转换为python中的字典"""
with open("configs/jta_all_visual_cues.yaml", "rt") as reader:
config = yaml.load(reader, Loader=yaml.Loader)
"""将字典写入demo.yaml中"""
with open("demo.yaml", 'w') as f:
yaml.dump(config, f)
执行完毕后,将demo.yaml文件的内容为: