自动化项目配置或用例文件格式推荐--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
原文地址:https://www.cnblogs.com/xiaohuhu/p/9432770.html