yaml自定义与读取(代码片段)

sayiqiu sayiqiu     2022-12-06     318

关键词:

简介

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) 

pytest+yaml框架-5.调用内置方法和自定义函数(代码片段)

...f0c;我需要每次生成不一样的,那么我们可以调用自己定义的函数pip安装插件pipinstallpytest-yaml-yoyoyaml中调用内置方法pytest-yaml-yoyo插件使用了强大的jinja2模板引擎,所以我们在yaml文件中可以写很多python内置的语法了 查看详情

yaml.load与yaml.dump的用法(代码片段)

yaml文件的读取与保存 #读取yaml文件withopen(‘C:\Users\51102\Desktop\123\info.yaml‘)asf:temp=yaml.load(f.read(),Loader=yaml.FullLoader)labels=temp[‘label_names‘]dellabels[0]#删除列表第一个元素print(labels)#建立一个yaml文件withopen(‘C:\Users\51102\Desktop\123\i... 查看详情

springboot2系列教程|yaml配置文件详解(代码片段)

自定义属性加载首先构建SpringBoot项目,不会的看这篇旧文使用IDEA构建SpringBoot工程。首先在项目根目录src>>resource>>?application.properties文件下加入以下自定义属性:#防止读取乱码spring.http.encoding.charset=UTF-8#项目启动端口serv... 查看详情

springbootyaml自定义配置映射到javapojo(代码片段)

  只需要一个注解就ok: @ConfigurationProperties("user.other")“user.other”这个值匹配的是user下的other对象  yaml:yaml的语法:  https://yaml.org/spec/1.2/spec.html#directive//user: 查看详情

python+appium+yaml安卓ui自动化测试分享(代码片段)

...文件,如读取配置文件、启动appium服务、读取Yaml文件、定义日志格式等page存放最小测试用例集,一个模块一个文件夹results存放测试报告及失败截图testcase存放测试用例runtest.py运行所有测试用例运行的结果:三、yaml格式 查看详情

读取自定义datagrid的每个单元格数据-wpfc#(代码片段)

我已经定义了一个自定义数据网格,其列由文本框,组合框和按钮组成。我还使用XAMLBinding在每个组合框中填充数据。现在,我想从数据网格中读取每个选定的组合框值和文本框值。但是我找不到任何方法来阅读它。我研究过论... 查看详情

kubernetes❀yaml文件配置模板(代码片段)

YAML文件配置模板apiVersion:v1#必选,版本号,例如v1kind:Pod#必选,Podmetadata:#必选,元数据name:string#必选,Pod名称namespace:string#必选,Pod所属的命名空间labels:#自定义标签-name:string#自定义标签名字annotatio 查看详情

kuberneteskubeadminit与join原理分析(代码片段)

...it        此外,我们也可以自己编写yaml文件来自定义kubeadm的启动过程和一些组件的启动参数等等$kubeadminit--configxxx.yaml    2、​k8snode节点部署(将一个node节点加入到已有集群当中)$kubeadmjoin<kube-apiserver的ip&#... 查看详情

双亲委派策略与自定义类加载器(代码片段)

类加载器类加载器(classloader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,... 查看详情

javascript自定义一个全类型读取的函数(代码片段)

...法可以读取类型,但是不很全面,今天来分享下如何自己定义一个函数,将所有传入参数的类型给打印出来,比较简单,那这边也是老样子基本每行代码都有注释,那么直接上代码把://自定义全类型读取functionfunc(type)//如果是普... 查看详情

docker&kubernetes❀kubernetes集群yaml语法与不同等级属性资源配置清单参数查询方法(代码片段)

...须小写namespace:string#必选,Pod所属的命名空间labels:#自定义标签-name:string#自定义标签名字annotations:#自定义注释列表-name:stringspec:#必选,Pod中容器的详细定义containers:#必选,Pod中容器列表-name:string#必选,容器名称ima... 查看详情

kustomize模版自由的配置&&自定义kubernetes工具(代码片段)

kustomize是一个可以方便我们基于模版配置,自定义kubernetes的工具,类似kompose,但是个人觉得kompose更灵活点,而且使用上更方便安装macbrewinstallkustomize基本使用创建kustomization.yaml文件(类似docker-compose)touchkustomization.yaml内容如下... 查看详情

自定义dependencyproperty与routedevent(代码片段)

原文:自定义DependencyProperty与RoutedEvent//自定义依赖属性classMyBook:DependencyObject//依赖属性必须派生自DependencyObjectpublicstaticreadonlyDependencyPropertyBookNameProperty=DependencyProperty.Register("BookName",typeo 查看详情

yaml配置注入(代码片段)

...erson类:2.yaml文件内容:3.出现提示:4.测试加载指定配置文件读取其他文件(yaml)1.新建配置文件2.加载配置文件(student类)读取其他文件(properties)1.新建配置文件2.加载配置文件(student类)读取其他文 查看详情

php自定义模块与表单(代码片段)

查看详情

[springboot]配置文件①(配置文件格式yaml配置及读取)(代码片段)

...则yaml配置文件数据读取使用@Value注解Environment对象自定义对象配置文件格式我们现在启动服务器默认的端口号是8080,访问路径可以书写为http://localhost:8080/books/1在线上环境我们还是希望将端口号改为80,这样在访问的... 查看详情

1.ansible-playbook变量定义与引用(代码片段)

简单的playbookplaybook是ansible的核心组件,使用的是YAML语法.下面请看简单的playbook代码[[email protected]playb]#catnginx.yaml-hosts:alltasks:-name:InstallNginxPackageapt:name=nginxstate=present-name:CopyNginx.conftemplate 查看详情

springbootlogging(代码片段)

...上一节Springboot配置文件读取和yaml结构springboot启动日志自定义logging1.配置文件中设置日志参数springboot对logback中的扩展支持控制台日志颜色输出下一节Springbootcrud和swagger使用源码源码链接https://gitee.com/mayun_xiaodu/ 查看详情