1.yaml格式
-
以.yml格式为后缀
-
键值对使用冒号结构表示 key: value,冒号后面要加一个空格
2.yaml的基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
3.yaml的数据类型
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。也可以使用 key:{key1: value1, key2: value2, …}。
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
以 - 开头的行表示构成一个数组:如上的可以表示为:
Student: [{id: 1,name: zhangsan,score: 98},{id: 2,name: lisi,score: 96}]
复合结构:
转换为json格式如下:
{
key: {
key1: value1,
key2: value2
},
Student: [{id: 1,name: zhangsan,score: 98},{id: 2,name: lisi,score: 96}]
}
- 纯量(scalars):单个的、不可再分的值
3.yaml使用
3.1 如何导入yaml
使用
import yaml
- python3中必须先安装pyyaml模块,使用命令为
pip install pyyaml
- python2中安装yaml模块,使用命令
pip install yaml
3.2 具体方法
- yaml.load(f)
作用是用来将YAML文档转化成Python对象
yaml文件如下图:
with open(yaml_file, 'r') as fh:
conf_yaml = yaml.load(fh,Loader=yaml.Loader)
print(conF_yaml)
结果:
{'name': 'zhangsan', 'age': 15, 'score': [{'English': 90}, {'Chinese': 92}, {'Math': 100}]}
- yaml.load_all(f)
返回yaml文件中所有的yaml文档的对象生成一个迭代器,再使用for打印出来
yaml文件如下图:
yaml文件如下:
fh = open(yaml_file, 'r',encoding='utf-8')
confs_yaml_mulit = yaml.load_all(fh,Loader=yaml.Loader)#读取文件,并且转换为字典形式存放
for i in confs_yaml_mulit:
print(i)
结果:
{'name': 'zhangsan', 'age': 15, 'score': [{'English': 90}, {'Chinese': 92}, {'Math': 100}]}
{'name': 'lisi', 'age': 18, 'score': [{'English': 98}, {'Chinese': 90}, {'Math': 80}]}
- yaml.dump(c,f)
将一个python对象生成为yaml文档,存放在f中
obj1 = {"name": "James", "age": 20}
with open('../cfg/test.yaml', 'w') as f:
yaml.dump(obj1,f)
生成的test.yaml文件如下:
- yaml.dump_all(c,f)
将多个python对象生成为yaml文档,存放在f中
obj1 = {"name": "James", "age": 20}
obj2 = ["Lily", 19]
with open('../cfg/test.yaml', 'w') as f:
yaml.dump_all([obj1, obj2], f)
生成的test.yaml文件如下: