zoukankan      html  css  js  c++  java
  • day5模块学习--yaml文件处理

    yaml文件处理(http://pyyaml.org/wiki/PyYAMLDocumentation)

        摘要: 本文讲的是yaml在python上的使用教程详解, YAML是一种容易人类阅读、适合表示程序语言的数据结构、可用于不同程序间交换数据、支持泛型工具、支持串行处理、丰富的表达能力和可扩展性、易于使用的语言。YAML利用缩进或者是explicit indicatior(如{})来表示属。

        YAML是一种容易人类阅读、适合表示程序语言的数据结构、可用于不同程序间交换数据、支持泛型工具、支持串行处理、丰富的表达能力和可扩展性、易于使用的语言。YAML利用缩进或者是explicit indicatior(如{})来表示属性的嵌套,更为直观和simple。

        YAML用来做配置文件,很多项目的配置文件都是yaml文件格式。

      一、YAML的格式

      YAML的格式及特点如下:

      YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16。
      使用空白字元为文件缩排来表示结构;不过不能使用跳格字元(TAB)。
      注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
      每个清单成员以单行表示,并用短杠+空白( -   )起始。或使用方括号( [ ] ),并用逗号+空白( ,   )分开成员。
      每个杂凑表的成员用冒号+空白( :   )分开键值和内容。或使用大括号( {   } ),并用逗号+空白( ,   )分开。
      杂凑表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值。
      字串平常并不使用引号,但必要的时候可以用双引号 ( " )或单引号 ( ' )框住。
      使用双引号表示字串时,可用倒斜线( )开始的跳脱字元(这跟C语言类似)表示特殊字元。
      区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
      在单一档案中,可用连续三个连字号(---)区分多个档案。
      另外,还有选择性的连续三个点号( ... )用来表示档案结尾。
      重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。
      指定格式可以使用两个惊叹号 ( !! ),后面接上名称。
      档案中的单一文件可以使用指导指令,使用方法是百分比符号( % )。有两个指导指令在YAML1.1版中被定义:
       %YAML 指导指令,用来识别文件的YAML版本。
       %TAG 指导指令,被用在URI的字首标记。这个方法在标记节点的型态时相当有用。
      YAML再使用逗号及冒号时,后面都必须接一个空白字元。

      二、PyYAML的使用

      1、安装

      python下安装PyYAML模块可以使用YAML ,打开https://pypi.python.org/pypi/PyYAML下载,当前版本3.11 。pypi 站点上对该模块的描述如下:PyYAML features a complete YAML 1.1 parser, Unicode support, pickle support, capable extension API, and sensible error messages 。

      可以连网的主机也可以通过pip install pyyaml 或easy_install pyymal 进行安装。

      2、yaml.load与yaml.dump方法

      该模块提供了一些方法,不过常用的方法只有两个yaml.load和yaml.dump,以下是一个版本相关的yaml格式文件:

    yaml文件:
    treeroot: branch1: name: Node
    1 branch1-1: name: Node 1-1 branch2: name: Node 2 branch2-1: name: Node 2-1 程序处理: import yaml with open("yaml文件","r") as f: message = yaml.load(f) print(type(message),message) 运行结果如下: <class 'dict'> {'treeroot': {'branch1': {'name': 'Node 1', 'branch1-1': {'name': 'Node 1-1'}}, 'branch2': {'name': 'Node 2', 'branch2-1': {'name': 'Node 2-1'}}}}

      yuml.dump方法:

        这里还承接上面的脚本,调用里面的dataMap 数据,将其保存一直新的yaml 文件,如下:

        import yaml
      with open("yaml文件","r") as f:

      message = yaml.load(f)

      f1 = open("new_yaml.yaml","w")
      yaml.dump(message,f1)
      f1.close()

        new_yaml.yaml的结果如下:

        treeroot:
        branch1:
          branch1-1: {name: Node 1-1}
          name: Node 1
        branch2:
          branch2-1: {name: Node 2-1}
          name: Node 2
     

        三、yaml 在python语言中的应用

        yaml 语言在很多优秀的python 程序中都有使用,比如运维工程师经常使用的两个自动化工作saltstack 与 Ansible 。更多PyYAML 模块的用法,也可以查看其官方wiki页 

      YAML的适用范围

      由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用.列一下现有的语言现现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言.YAML比较适合做序列化。因为它是宿主语言数据类型直转的。

      YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.由于兼容性问题,不同语言间的数据流转建议现在不要用YAML.

        YAML文件及处理:

    yaml文件:
    name: Tom Smith
    age: 37
    spouse:
        name: Jane Smith
        age: 25
    children:
     - name: Jimmy Smith
       age: 15
     - name1: Jenny Smith
       age1: 12
     - work: dataanalysis
       date: 2017-5-18
    
    #yaml处理脚本
    import yaml
    
    f = open("new_yaml.yaml","r")
    message = yaml.load(f)
    f.close()
    print(message)
    
    运行结果如下:
    {'name': 'Tom Smith', 'spouse': {'name': 'Jane Smith', 'age': 25}, 'age': 37, 'children': [{'name': 'Jimmy Smith', 'age': 15}, {'age1': 12, 'name1': 'Jenny Smith'}, {'date': '2017-5-18', 'work': 'dataanalysis'}]}

        从上面可以看出,"-"代表统计,生成的时候会是一个列表的形式,这样可用于字典下面嵌套列表,文件前面有几个"-"代表嵌套了几层字典。

  • 相关阅读:
    字符串练习
    python基础
    熟悉常用的Linux操作
    大数据概述
    递归下降分析程序
    自动机
    词法语法分析1
    关于我对编译原理的理解
    6小时学会TypeScript入门实战教程(大地)
    kotlin
  • 原文地址:https://www.cnblogs.com/gengcx/p/7226896.html
Copyright © 2011-2022 走看看