zoukankan      html  css  js  c++  java
  • python之常用模块ymal

    在学习python如何操作yml文件之前,我们先科普一下yml的格式

    yaml是专门写配置文件的语言,非常简洁和强大,比json更加方便

    YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

    它的基本语法规则如下:

      1,大小写敏感

      2,使用缩进表示层级关系

      3,缩进时不允许使用tab键,只允许使用空格

      4,缩进的空格数目不重要,只要相同层级的元素左对齐即可

    # 表示注释,从这个符号开始, 一直到行尾,都会被解释器忽略

    yaml支持的数据结构 有三种:

      1,对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

      2,数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

      3,纯量(scalars):单个的、不可再分的值

    以下分别介绍这三种数据结构

    一,对象

      对象的一组键值对,使用冒号结构表示

      animal:pets

      Yaml 也允许另一种写法,将所有键值对写成一个行内对象

      hash:{name:Steve,foo:bar}

    二,数组

      一组连词线开头的行,构成一个数组

      - cat

      - Dog

      数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:

      -

              - cat

         - Dog

      数组也可以采用行内表示法:

      animal:[cat,Dog]

    三,复合结构

      对象和数组可以结合使用,形成复合结构:

      languages:

        - Ruby

        - Perl

             - Python

      websites:

        YAML:yaml.org

        Ruby:ruby-lang.org

        Python:python.org

        Perl:use.perl.org

    四,纯量

      纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量:

      1,字符串

      2,布尔型

      3,整数

      4,浮点型

      5,null

      6,时间

      7,日期

      数值直接以字面量的形式表示:

        number:12.30

      布尔值用truefalse表示:

        isSet:True

      null用~表示:

        parent:~

      时间采用 ISO8601 格式:

        iso8601:2001-12-14t21:59:43.10-05:00

      日期采用复合 iso8601 格式的年、月、日表示:

        date:2018-01-01

      YAML 允许使用两个感叹号,强制转换数据类型:

        e: !!str 123

        f: !!str Ture

    五,字符串

      字符串是最常见的,也是最复杂的一种数据类型

      字符串默认不适用引号表示

      str:这是一行字符串

      如果字符串包含空格,特殊符号等,需要放到引号内

      str:'内容:字符串'

      单引号和双引号都可以用,双引号不会对特殊字符转义

      s1:'内容 字符串'

      s2:“内容 字符串”

      单引号之中如果还有单引号,必须连续使用两个单引号转义

      str:'labor''s day'

      字符串可以写成多行,从第二行开始,必须有一个单空格缩进,换行符会被转成空格

      str:这是一段

        多行

        字符串

      多行字符串可以使用|保留换行符,也可以使用>折叠换行

      this: |

        foo

        bar

      that: >

        foo

        bar

      +表示保留文字块末尾的换行,-表示删除文字块末尾的换行

      s1: |

        foo

      s2: |+

        foo

      s3: |-

        foo

      字符串内可以插入HTML标记

      message: |

        <p style='color:red'>

          段落

        /p>

    六,引用

      锚点&和别名*,可以用来引用

      defaults: &defaults

         adapter: postgres

         host:   localhost

      development:

        database:myapp_development

        <<:*defaults

      test:

        database:myapp_test

        <<:*defaults

      等同于下面的代码:

      defaults:

        adapter:postgres

        host:localhost

      development:

        database:myapp_development

        adapter:postgres

        host:localhost

      test:

        database:myapp_test

        adapter:postgres

        host:localhost

    ----------------------------------下面看完整的列子----------------------------------------

    #这是一个ymal

    name: Tom Smith
    age: 37
    spouse:
    name: Jane Smith
    age: 25
    children:
    - name: Jimmy Smith
    age: 25
    - name1: Jenny Smith
    age1: 12

    #这是读取yaml的py代码,用load方法
    import yaml
    f = open('test.yaml')
    y = yaml.load(f)
    print(y)
    #这是结果:{'name': 'Tom Smith', 'age': 37, 'spouse': {'name': 'Jane Smith', 'age': 25}, 'children': [{'name': 'Jimmy Smith', 'age': 25}, {'name1': 'Jenny Smith', 'age1': 12}]}

    --------------------自动生成yaml文件--------------------用dump方法
    import yaml

    d = [{'tasks': [{'yum': {'state': 'latest', 'name': 'httpd'}, 'name': 'ensure apache is at the latest version'}, {'name': 'write the apache config file', 'template': {'dest': '/etc/httpd.conf', 'src': '/srv/httpd.j2'}, 'notify': ['restart apache']}, {'name': 'ensure apache is running', 'service': {'state': 'started', 'name': 'httpd'}}], 'hosts': 'webservers', 'remote_user': 'root', 'vars': {'http_port': 80, 'max_clients': 200}, 'handlers': [{'name': 'restart apache', 'service': {'state': 'restarted', 'name': 'httpd'}}]}]

    with open("./test.yaml","w") as f:
    yaml.dump(d,f)

    #生成的结果文件
    - handlers:
    - name: restart apache
    service: {name: httpd, state: restarted}
    hosts: webservers
    remote_user: root
    tasks:
    - name: ensure apache is at the latest version
    yum: {name: httpd, state: latest}
    - name: write the apache config file
    notify: [restart apache]
    template: {dest: /etc/httpd.conf, src: /srv/httpd.j2}
    - name: ensure apache is running
    service: {name: httpd, state: started}
    vars: {http_port: 80, max_clients: 200}

      

        



  • 相关阅读:
    字符串排序
    螺旋方阵
    Palindrome(最长回文串manacher算法)O(n)
    最长回文串(manacher算法)
    hdu 1236 1.3.2排名
    hdu 1062 Text Reverse
    VS2010/MFC对话框四:为控件添加消息处理函数
    VS2010/MFC对话框三:创建对话框类和添加控件变量
    VS2010/MFC对话框二:为对话框添加控件)
    VS2010/MFC对话框一:创建对话框模板和修改对话框属性
  • 原文地址:https://www.cnblogs.com/hally/p/8318724.html
Copyright © 2011-2022 走看看