python之读取yaml数据
一、yaml简介
yaml:一种标记语言,专门用来写配置文件。
二、yaml基础语法
- 区分大小写;
- 使用缩进表示层级关系;
- 使用空格键缩进,而非Tab键缩进
- 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
- 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
- 注释标识为#
三、yaml的数据结构
- 对象:键值对的集合(简称 "映射或字典")
键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔 - 数组:一组按序排列的值(简称 "序列或列表")
数组前加有 “-” 符号,符号与值之间需用空格分隔 - 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
None值可用null可 ~ 表示
前提:python中读取yaml文件前需要安装pyyaml和导入yaml模块。
python读取yaml:
# get_yaml.py import yaml def get_yaml_data(yaml_file):
print("*****获取yaml数据*****")
with open(yaml_file, encoding='utf-8')as file:
content = file.read()
print(content)
print(type(content)) print("\n*****转换yaml数据为字典或列表*****")
# 设置Loader=yaml.FullLoader忽略YAMLLoadWarning警告
data = yaml.load(content, Loader=yaml.FullLoader)
print(data)
print(type(data))
print(data.get('my')) # 类型为字典 <class 'dict'>
# print(data[0]["model"]) # 若类型为列表 <class 'list'>
if __name__ == "__main__":
get_yaml_data("config.yaml")
# config.yaml
user: my
pwd:
运行结果:
*****获取yaml数据*****
# yaml键值对:即python中的字典
user: my
pwd: 1111
<class 'str'> *****转换yaml数据为字典或列表*****
{'user': 'my', 'pwd': 1111}
<class 'dict'>
my
2、yaml键值对嵌套:即python中的字典嵌套字典
# config.yaml user1:
name: a
pwd: 111222
user2:
name: b
pwd: 222333
运行结果:
*****获取yaml数据*****
user1:
name: a
pwd: 111222
user2:
name: b
pwd: 222333
<class 'str'> *****转换yaml数据为字典或列表*****
{'user1': {'name': 'a', 'pwd': 111222}, 'user2': {'name': 'b', 'pwd': 222333}}
<class 'dict'>
{'name': 'a', 'pwd': 111222}
3、yaml键值对中嵌套数组
# config.yaml user3:
- a
- b
user4:
- d
- e
运行结果:
*****获取yaml数据*****
user3:
- a
- b
user4:
- d
- e
<class 'str'> *****转换yaml数据为字典或列表*****
{'user3': ['a', 'b'], 'user4': ['d', 'e']}
<class 'dict'>
['a', 'b']
4、yaml数组中嵌套键值对
# config.yaml - user1: aaa
- pwd1: 111
user2: bbb
pwd2: 222
运行结果:
*****获取yaml数据*****
- user1: aaa
- pwd1: 111
user2: bbb
pwd2: 222
<class 'str'> *****转换yaml数据为字典或列表*****
[{'user1': 'aaa'}, {'pwd1': 111, 'user2': 'bbb', 'pwd2': 222}]
<class 'list'> # 注意,此时的类型为list而非dict, 所以用下标访问,即data[0]["user1"]
aaa
5、yaml中纯量
# config.yaml s_val: hello world
num_val: 15
bol_val: true
nul_val: null
data_val: 2020-08-17
运行结果:
*****获取yaml数据*****
s_val: hello world
num_val: 15
bol_val: true
nul_val: null
data_val: 2020-08-17
<class 'str'> *****转换yaml数据为字典或列表*****
{'s_val': 'hello world', 'num_val': 15, 'bol_val': True, 'nul_val': None, 'data_val': datetime.date(2020, 8, 17)}
<class 'dict'>
hello world
# config.yaml # 使用-分隔用例,则yaml读取到的数据类型为列表
-
model: 注册模块
title: 注册成功
url: http://api.nnzhp.cn/api/user/user_reg
method: POST
data:
username: yingcr8
pwd: Ace123456
cpwd: Ace123456
check:
error_code: 0
msg: 注册成功!
-
model: 注册模块
title: 用户名长度小于6位,注册失败
url: http://api.nnzhp.cn/api/user/user_reg
method: POST
data:
username: yingc
pwd: Ace123456
cpwd: Ace123456
check:
error_code: 3002
# get_yaml.py import requests
import yaml
import urllib3
import json
urllib3.disable_warnings() class SignTest(): def __init__(self, file):
self.file = file def test_sign(self):
with open(self.file, encoding='utf-8') as fobj:
content = fobj.read()
# 使用 yaml.load()将yaml数据转换为list或dict
data = yaml.load(content, Loader=yaml.FullLoader)
# 使用for循环,依次读取测试用例
for i in range(len(data)):
# 从config.yaml中提取接口的参数
# 由于读取到的数据类型为list列表,所以只能用下标访问
model = data[i]['model']
title = data[i]['title']
url = data[i]['url']
method = data[i]['method']
datas = data[i]['data']
check = data[i]['check']
self.sign_test(model, title, url, method, datas, check) def sign_test(self, model, title, url, method, datas, check):
print("模块:", model)
print("用例标题:", title)
response = requests.request(url=url, method=method, data=datas)
response = json.loads(response.text)
print(response)
try:
# 通过断言,判断实际结果是否与预期结果一致
assert check['error_code'] == response['error_code']
print("测试通过\n")
except Exception:
print("测试失败\n") if __name__ == "__main__":
signtest = SignTest("config.yaml")
signtest.test_sign()
运行结果:
模块: 注册模块
用例标题: 注册成功
{'error_code': 0, 'msg': '注册成功!'}
测试通过 模块: 注册模块
用例标题: 用户名长度小于6位,注册失败
{'error_code': 3002, 'msg': '用户名长度为6-10位!'}
测试通过
python之读取yaml数据的更多相关文章
- Delphi中使用python脚本读取Excel数据
Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- python中读取mongodb数据并保存为csv格式的文件
import pandas as pd import matplotlib.pyplot as plt import pymongo %matplotlib inline # 连接mongodb数据库 ...
- 【Python】读取excel数据
'''python3读取excle数据''' import xlrd workbook = xlrd.open_workbook(r'test.xls', encoding_override='gbk ...
- python 中读取yaml
YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. YAML在python语言中有PyYAML安装包. YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类 ...
- python中读取文件数据时要注意文件路径
我们在用python进行数据处理时往往需要将文件中的数据取出来做一些处理,这时我们应该注意数据文件的路径.文件路径不对,回报如下错误: FileNotFoundError: File b'..Adve ...
- Python——pandas读取JSON数据,xml,html数据(python programming)
- python分块读取大数据,避免内存不足
- python的logging模块之读取yaml配置文件。
python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...
- Python读取Yaml文件
近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...
随机推荐
- golang bool值
目录 前言 1.基本介绍 2.类型转换 3.使用: 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到这里 随着学习深入,会进行知 ...
- 【高阶版】Python词典
使用dict.fromkeys()创建词典的一个坑 创建词典有三种方法,第一是直接赋值,d = {1:2, 2:3}:第二个是,通过构造方法,d = dict([(1, 2), (2, 3)]),第三 ...
- JavaScript基础-03
1. 条件判断语句 若条件成立才会执行,条件不成立则语句不执行: if语句 语法一: if(条件表达式) {语句} :true就执行,false不执行: 语法二: if(条件表达式) ...
- async 函数的含义和用法
Generator函数的含义与用法 Thunk函数的含义与用法 co函数库的含义与用法 async函数的含义与用法 一.终极解决 异步操作是 JavaScript 编程的麻烦事,麻烦到一直有人提出各种 ...
- ExcelWeb脚本助手,自定义脚本,批量操作Excel与网页
ExcelWeb脚本助手,是一款可以自定义脚本操控Excel和浏览器的工具.提供了简单实用的Excel与Browser的API调用,通过自建脚本或自建项目,随意定制. 可以非常方便的根据Excel中的 ...
- 基于OpenSIPS 实现分机注册服务服务器
呼叫中心平台中坐席是不可或缺的一环,而坐席打电话自然需要使用办公分机.通常情况下我们通过软交换平台FreeSWITCH.Asterisk即可搭建分机注册服务. 但单台FreeSWITCH或Asteri ...
- asp.net core mvc和angular项目的一些问题
最近公司布置任务,用asp.net core mvc和angular改写原来的一个用Silverlight做的项目.从来没搞过,找了两本书看了一天,又看了一天代码,大致心里有底了,就开始动手.没想到一 ...
- Ubuntu 18.04 安装 docker, 设置阿里云加速
1.卸载旧的 docker 环境 sudo apt-get remove docker docker-engine docker.io containerd runc 2.设置仓库 更新索引 sudo ...
- Android PopupWindow显示之后所在的Activity结束的时候出现短暂黑屏问题
在当前Activity弹出PopuoWindow后,点击取消弹窗,然后结束当前Activity时会出现短暂黑屏现象.这是由于设置背景透明度时候造成的. //设置添加屏幕的背景透明度 public vo ...
- SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。——猿实战02
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...