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
    '}
  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/sellsa/p/9950676.html
Copyright © 2011-2022 走看看