zoukankan      html  css  js  c++  java
  • 第3天:YAML语法

    YAML是一种可读性很强的数据格式语言。正是由于YAML良好的可读性,其广泛引用于软件配置中。

    语法规则

    • YAML文件中的第一行为"---",表示这是一个YAML文件;
    • YAML中的字段大小写敏感
    • YAML与Python一样,使用缩进表示层级关系
    • YAML的缩进不允许使用Tab键,只允许使用空格,且空格的数目不重要,只要相同层级的元素左侧对齐即可
    • "#"表示注释,从这个字符一直到行尾都会被解析器忽略

    YAML支持三种格式的数据,分别是:

    • 对象:键值对的集合,又称为映射,类似于Python中的字典
    • 数组:一组按次序排列的值,有称为序列,类似于Python中的列表
    • 纯量:单个的,不可 再分的值,如字符串、布尔值与数字

    YAML例子演示

    下面结合Python来看几个YAML的例子,这些自理没有包含YAML的全部语法,但是足够理解和编写Ansible的Playbook.

    为了解析YAML格式的文件,需要安装第三方的PyYAML库。直接使用pip安装即可:

    pip install PyYAML

    在YAML中的数组,只需要用"-"将元素按序列出即可, 比如有一个data.yaml文件,内容如下

    ---
    #一个美味水果的列表
    - Apple
    - Orange
    - Strawberry
    - Mango

    使用PyYAML库解析YAML文件非常简单,如下

    In [1]: import yaml
    
    In [2]: with open('data.yaml') as f:
       ...:     print(yaml.load(f))
       ...:     
    ['Apple', 'Orange', 'Strawberry', 'Mango']

    在YAML中,对象以"key:value"的形式进行定义,如下

    ---
    #以为职工的记录
    name: Example Developer
    job: Developer
    skill: Elite

    转换为python内部对象以后,结果如下:

    {'skill': 'Elite', 'job': 'Developer', 'name': 'Example Developer'}

    YAML中可以使用多种方式指定布尔值,例如下面的格式都是合法的

    ---
    create_key: yes
    needs_agent: no
    knows_oopL: True
    like_emacs: TRUE
    uses_cvs: false

    转换为python代码以后,对变量的取值进行了格式化

    {'create_key': True, 'like_emacs': True, 'needs_agent': False, 'knows_oopL': True, 'uses_cvs': False}

    YAML中的对象和数组也可以任意嵌套

    ---
    #一位职工记录
    name: heboan
    job: sa
    skill: Elite
    employed: True
    foods:
        - Apple
        - Orange
        - Strawberry
        - Mango
    languages:
        ruby: Elite
        python: Elite
        dotnet: Lame

    将上面的YAML转换为Python的内部对象结果如下

    {
        'languages': {
            'python': 'Elite', 
            'dotnet': 'Lame', 
            'ruby': 'Elite'
            }, 
        'foods': [
            'Apple', 
            'Orange', 
            'Strawberry', 
            'Mango'
        ], 
        'name': 'heboan',
        'employed': True, 
        'skill': 'Elite',
        'job': 'sa'
    }

    在YAML中定义字符串时,甚至都不需要使用单引号或双引号,直接写在文件建中即可:

    str: this is a string

    如果字符串中包含特殊字符,需要使用双引号包含起来,如冒号

    str: "somebody said I should put a colon here: so I did"

    如果字符串的内容较长,可以使用">"来折叠换行,也就是说,接下来的缩进的内容都是这个字符串的一部分:

    ---
    str: >
        my name is heboan
        cccc

    转换成python如下:

    {'str': 'my name is heboan cccc
    '}
  • 相关阅读:
    Calling Convention的总结
    形参传递关键点
    linux input输入子系统分析《四》:input子系统整体流程全面分析
    22.Linux-块设备驱动之框架详细分析(详解)
    spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)
    spring: 使用嵌入式数据源 EmbeddedDatabaseBuilder
    jsp:jstl标签之控制流程
    jsp: jstl标签库
    jsp:tld标签
    spring boot: 组合注解与元注解
  • 原文地址:https://www.cnblogs.com/sellsa/p/9950676.html
Copyright © 2011-2022 走看看