• yaml自定义与读取


    简介

    yaml[ˈjæməl]: Yet Another Markup Language。yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似于json格式

    基本语法:

    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进时不允许使用tab键,只能使用空格
    • 缩进的空格数目不重要,只要相同层级的元素左对齐即可
    • '#' 表示注释,与python类似

    支持的数据结构:

    • 对象: 键值对的集合,又称字典
    • 数组: 列表/序列
    • 纯量: 单个的、不可再分的值。字符串、布尔值、整数、浮点数

    安装

    pip instal pyyaml

    键值对(dict)

    # 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'}
    ]
    
    

    yaml.load()出现警告的解决办法

    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.

    YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载​​器(FullLoader)禁止执行任意函数,该load函数也变得更加安全

    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) 
    
  • 相关阅读:
    初谈面向对象
    java概述~至数组
    django一对多数据库模型
    Django url()函数详解
    python编码规范
    django的用户管理
    ubuntu下安装搜狗拼音
    乱七八糟的2013
    使用django进行微信公众平台开发
    我们要写的项目
  • 原文地址:https://www.cnblogs.com/sayiqiu/p/10808347.html
Copyright © 2020-2023  润新知