基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用tab键,只能使用空格
- 缩进的空格数目不重要,只要相同层级的元素左对齐即可
- '#' 表示注释,与python类似
支持的数据结构:
- 对象: 键值对的集合,又称字典
- 数组: 列表/序列
- 纯量: 单个的、不可再分的值。字符串、布尔值、整数、浮点数
pip instal pyyaml
# python { "user": "admin", "pwd": "123456", }
# yaml user: admin pwd: 123456
字典嵌套字典
# python "nb1":{ "user": "admin", "pwd": "123456", }
# yaml nb1: user: admin pwd: 123456
yaml里面写一个数组,前面加一个'-'符号
- admin1: 123 - admin2: 345
- int/float:
n1: 12.30
- bool:
n2: true
- None:
n4: ~
- 强制转换类型:
n6: !!str 123
, int->str
- list嵌套dict
# yaml - user: admin1 pwd: '123' - user: admin2 pwd: '234' - user: admin3 pwd: '413'
用python读出来的结果
[ {'user': 'admin1', 'pwd': '123'}, {'user': 'admin2', 'pwd': '234'}, {'user': 'admin3', 'pwd': '413'} ]
Warning: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
e.g.
yaml.load(input, Loader=yaml.FullLoader)
有一个yaml配置文件,希望能让用户自定义神经网络,而不是使用完整的task_list,并且对于这些自定义的网络,也采用自定义的数据类型进行量化
# test.aml caffe_models: - imagenet - mobilenet_v2 - resnet50 - inception_v3 - imagenet - yolo_v2 - alexnet - squeezenet_v1.0 - lenet - mobilenet dtype_list: - asymmetric_quantized-u8
大概的思路:
import yaml import os yaml_path = os.path.join('test.aml') f = open(yaml_path, 'r', encoding="utf-8") cfg = f.read() content = yaml.load(cfg, Loader=yaml.FullLoader) task_list = [] for key in content: if key == "caffe_models": for value in content[key]: task = (key, value) task_list.append(task) print('#'*100) print(task_list)