• 自动化项目配置或用例文件格式推荐--yaml


    关于yaml

    • YAML语言的设计目标,就是方便人类读写。如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件
    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进时不允许使用Tab键,只允许使用空格。
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    • # 表示注释,从它开始到行尾都被忽略

    yaml数据结构

    1. yaml转字典

    yaml中支持映射或字典的表示,如下:

    # 下面格式读到Python里会是个dict
    name: 灰蓝
    age: 0
    job: Tester

    输出:

    {'job': 'Tester', 'age': 0, 'name': u'u7070u84dd'}

    2. yaml转列表

    yaml中支持列表或数组的表示,如下:

    # 下面格式读到Python里会是个list
    - 灰蓝
    - 0
    - Tester

    输出:

    [u'u7070u84dd', 0, 'Tester']

    3. 复合结构

    字典和列表可以复合起来使用,如下:

    # 下面格式读到Python里是个list里包含dict
    - name: 灰蓝
      age: 0
      job: Tester
    - name: James
      age: 30

    输出:

    [{'job': 'Tester', 'age': 0, 'name': u'u7070u84dd'}, {'age': 30, 'name': 'James'}]

    4. 基本类型

    yaml中有以下基本类型:

    • 字符串
    • 整型
    • 浮点型
    • 布尔型
    • null
    • 时间
    • 日期

    我们写个例子来看下:

    # 这个例子输出一个字典,其中value包括所有基本类型
    str: "Hello World!"
    int: 110
    float: 3.141
    boolean: true  # or false
    None: null  # 也可以用 ~ 号来表示 null
    time: 2016-09-22t11:43:30.20+08:00  # ISO8601,写法百度
    date: 2016-09-22  # 同样ISO8601

    输出:

    {'date': datetime.date(2016, 9, 22), 'None': None, 'boolean': True, 'str': 'Hello World!', 'time': datetime.datetime(2016, 9, 22, 3, 43, 30, 200000), 'int': 110, 'float': 3.141}

    如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了

    str: 灰蓝
    str1: "Hello World"
    str2: "Hello
    World"

    输出:

    {'str2': 'Hello
    World', 'str1': 'Hello World', 'str': u'u7070u84dd'}

    这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:

    str1: 'Hello
    World'
    str2: "Hello
    World"
    # -*- coding: utf-8 -*-
    import yaml
    
    y = yaml.load(file('test.yaml', 'r'))
    print y['str1']
    print y['str2']

    输出:

    Hello
    World
    Hello
    World

    可以看到,单引号中的’ ’最后是输出了,双引号中的’ ’最后是转义成了回车

    读写yaml文件

    • 安装:pip install ruamel.yaml
    • 使用ruamel.yaml库里面函数参数Loader=ruamel.yaml.RoundTripLoader和Dumper=ruamel.yaml.RoundTripDumper可以用来保持新生成的yaml文件的表现和输入文件一致。代码如下:
    from ruamel import yaml
    
    if __name__ == "__main__":
        #从yaml文件读取
      with open('father.yml','r',encoding="utf-8") as f: content = yaml.load(f, Loader=yaml.RoundTripLoader) # output: <type 'dict'> print(type(content)) print(content) content.update({'age': 38}) print(content)
      #写入到yaml文件 with open('ruamel.yml', 'w',,encoding="utf-8") as nf: yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)

    生成新的yaml文件形式如下,正是我们期望的格式:

    name: John Smith
    age: 38
    spouse:
      name: Jane Smith
      age: 25
    children:
    - name: Jimmy Smith
      age: 15
    - name: Jenny Smith
      age: 12
    
  • 相关阅读:
    0920 计算器,公共控件
    0919 认识winform,简单属性
    0914 c#的遍历查询-属性扩展
    0913 完整修改,删除-实体类-数据操作类
    0912 ADO.NET 增删改查
    0911 类库,委托
    0909 多态,抽象类,接口
    0908 封装继承
    0906 面向对象思想,类的介绍
    读《你不知道的JavaScript(上卷)》后感-浅谈JavaScript作用域(一)
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/9432770.html
Copyright © 2020-2023  润新知