关于yaml

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

yaml数据结构

1. yaml转字典

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

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

输出:

{'job': 'Tester', 'age': 0, 'name': u'\u7070\u84dd'}

2. yaml转列表

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

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

输出:

[u'\u7070\u84dd', 0, 'Tester']

3. 复合结构

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

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

输出:

[{'job': 'Tester', 'age': 0, 'name': u'\u7070\u84dd'}, {'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\nWorld"

输出:

{'str2': 'Hello\nWorld', 'str1': 'Hello World', 'str': u'\u7070\u84dd'}

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

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

输出:

Hello\nWorld
Hello
World

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

读写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

自动化项目配置或用例文件格式推荐--yaml的更多相关文章

  1. Selenium Web 自动化 - 项目持续集成(进阶)

    Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置  2.1 SVN的安装及使用  2.2 新建Jenkins任务3 过程分析 1 背景 ...

  2. Selenium Web 自动化 - 项目持续集成

    Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备  1.1 安装git  1.2 安装jenkins  1.3 安装jenkins插件  1.4 jekins ...

  3. Android 项目配置 gitlab-ci 持续集成

    一.项目根目录下创建一个 .gitlab-ci.yml 文件 然后在 .gitlab-ci.yml 中配置持续集成的脚本: 脚本配置详细可以看: Configuration of your jobs ...

  4. Selenium Web 自动化 - 项目实战(一)

    Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...

  5. playwright自动化项目搭建

    这是关于playwright系列介绍的最后一篇.搭建基于 playwright 的自动化项目. GitHub地址: https://github.com/defnngj/playwright-pro ...

  6. python+pytest接口自动化(16)-接口自动化项目中日志的使用 (使用loguru模块)

    通过上篇文章日志管理模块loguru简介,我们已经知道了loguru日志记录模块的简单使用.在自动化测试项目中,一般都需要通过记录日志的方式来确定项目运行的状态及结果,以方便定位问题. 这篇文章我们使 ...

  7. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  8. Gulp.js - 简单、直观的自动化项目构建工具

    Gulp.js 是一个简单.直观的构建系统.崇尚代码优于配置,使复杂的任务更好管理.通过结合 NodeJS 的数据流的能力,你能够快速构建.通过简单的 API 接口,只需几步就能搭建起自己的自动化项目 ...

  9. VC项目配置基础以及快捷键(收藏)

    来自http://blog.csdn.net/phunxm/article/details/5082488 一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font” ...

随机推荐

  1. 【bzoj2084】[Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1205  Solved: 756[Submit ...

  2. saltstack学习笔记--grains基本操作

    查看当前已经定义的监控项: [root@master ~]# salt "192.168.75.135" grains.items 192.168.75.135:     ---- ...

  3. C#: static关键字的作用(转)

    C#: static关键字的作用   static意思是静态,可以修饰类.字段.属性.方法 标记为static的就不用创建实例对象调用了,可以通过类名直接点出来 static三种用法: 1.用于变量前 ...

  4. nginx 80端口重定向到443端口

    server { listen ; server_name www.域名.com; rewrite ^(.*)$ https://${server_name}$1 permanent; } serve ...

  5. iframe及其引出的页面跳转问题

    前提:在前一段的工作中碰到了一些页面跳转,子页面跳到父页面上的等等问题,当时页面总是跳不对,或者跳错,要不就是不需要重新打开窗口,却又重新打开一个了,特此搜寻网上各大博客论坛,加上项目经验整理一篇文章 ...

  6. CSS层叠的问题、标准文档流、伪类选择器

    一.层叠的问题 CSS有两个性质: 1.继承性 2.层叠性:选择器的一种选择能力,谁的权重大就选谁 层叠性又分为: 1).选不中:走继承性  (font.color.text.) 继承性的权重是0 若 ...

  7. How the performance impacts your revenue-性能影响营收

    看完国外一个APM厂商最后的一个业务介绍视频,终于想通了PE领域中最顶层的应用目标,也就是如标题所云.那么这个影响效果是如何做到的?最终的步骤其实很简单,也就是利用大数据进行分析.而自己先前还没有想到 ...

  8. ubuntu 下service php5-fpm restart 报错 stop: Unknown instance: 解决

    问题描述: 在安装完扩展后,重启php-fpm,发现一直停止报错 stop: Unknown instance: 通过查看进程,也查询不到该主进程 解决办法: 干掉现在正在执行的进程 pkill ph ...

  9. redis源码分析之事务Transaction(下)

    接着上一篇,这篇文章分析一下redis事务操作中multi,exec,discard三个核心命令. 原文地址:http://www.jianshu.com/p/e22615586595 看本篇文章前需 ...

  10. EOS Dawn 3.0 智能合约 -- 新格式

    1.简介 随着EOS Dawn 3.0发布,智能合约的坑又要重新踩了o(╥﹏╥)o:3.0不仅将原来本身就在链里的基础合约独立出来,简单的介绍见3.0合约改变,合约的书写方式也有巨大变化,相比之前更加 ...