yaml自定义与读取

匿名 (未验证) 提交于 2019-12-02 23:32:01

基本语法:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用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) 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!