Python_PyYaml模块的使用
YAML是一种比XML和JSON更轻的文件格式,也更简单更强大,它可以通过缩进来表示结构。
模块安装
pip install pyyaml
# 如果是py2,使用 pip install yaml
PyYaml的简单使用
pyyaml就像json、pickle一样,load、dump就足够我们使用了。
将yaml格式数据转换成dict格式
比如,有如下格式的yaml文件
- test:
id: login
request:
url: XXX
method: POST - test:
id: get_user_info
request:
url: XXX
method: GET
validate:
- eq:
- [code, 0]
- [mail, 33@qq.com]
使用 safe_load 方法转换成dict格式数据
import yaml
with open("./test.yml") as f:
msg = f.read()
obj = yaml.safe_load(msg)
print(obj)
执行结果如下:

将dict格式数据转换成yaml格式
import yaml
msg = [{'test': {'id': 'login', 'request': {'url': 'XXX', 'method': 'POST'}}},
{'test': {'id': 'get_user_info', 'request': {'url': 'XXX', 'method': 'GET'}, 'validate': [{'eq': [['code', 0], ['mail', '33@qq.com']]}]}}]
yaml_msg = yaml.safe_dump(msg)
print(yaml_msg)
执行结果如下:

YAML的语法规则和数据结构
YAML 基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
- 列表里的项用"-"来代表,字典里的键值对用":"分隔
YAML 支持的数据结构有3种
- 对象:键值对的集合
- 数组:一组按次序排列的值,序列(sequence) 或 列表(list)
- 纯量(scalars):单个的、不可再分的值,如:字符串、布尔值、整数、浮点数、Null、时间、日期
数据结构示例:
str: "Big River" # 字符串
int: 1548 # 整数
float: 3.14 # 浮点数
boolean: true # 布尔值
None: null # 也可以用 ~ 号来表示 null
time: '2019-11-20T08:47:46.576701+00:00' # 时间,ISO8601
date: 2019-11-20 16:47:46.576702 # 日期
操作代码:
import yaml
with open("./test.yml", encoding="utf-8") as f:
msg = f.read()
obj = yaml.safe_load(msg)
print(obj)
执行结果:

其他语法规则
1. 字符串可以不需要加引号

2. & 和 * 可用于定义和引用变量

3. !! 用于强制转换

4. 3个“-” 用于将一个yaml文件分成多段,这样可以将多个文档写在一个文件中。读取多段yaml格式用 safe_load_all()方法,返回值是可迭代对象。
yaml文件内容如下:
int: 123
str: !!str 123
---
int: 456
str: abc
代码如下:
import yaml
with open("./test.yml", encoding="utf-8") as f:
msg = f.read()
objs = yaml.safe_load_all(msg)
print(objs)
for obj in objs:
print(obj)
执行结果如下:

Python_PyYaml模块的使用的更多相关文章
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- Python标准模块--ContextManager
1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- Python标准模块--Iterators和Generators
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
- 自己实现一个javascript事件模块
nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...
- 理解nodejs模块的scope
描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
随机推荐
- 【Linux】【Services】【KVM】virsh命令详解
1. virsh的常用命令 help:获取帮助 virsh help KEYWORD list:列出域 dumpxml:导出指定域的xml格式的配置文件: create:创建并启动域: define: ...
- 【Linux】【Shell】【text】文本处理工具
文本查看及处理工具:wc, cut, sort, uniq, diff, patch wc:word count wc [OPTION]... [FILE]... -l: lines -w:words ...
- MySQL批量数据脚本示例
一.建表 # 新建库 create database bigData; use bigData; #1 建表dept CREATE TABLE dept( id INT UNSIGNED PRIMAR ...
- 【C/C++】习题3-7 DNA/算法竞赛入门经典/数组与字符串
[题目] 输入m组n长的DNA序列,要求找出和其他Hamming距离最小的那个序列,求其与其他的Hamming距离总和. 如果有多个序列,求字典序最小的. [注]这道题是我理解错误,不是找出输入的序列 ...
- numpy基础教程--浅拷贝和深拷贝
在numpy中,使用等号(=)直接赋值返回的是一个视图,属于浅拷贝:要完整的拷贝一个numpy.ndarray类型的数据的话,只能调用copy()函数 # coding = utf-8 import ...
- MySQL数据库如何实现增量备份
1 .通过SHOW VARIABLES LIKE '%log_bin%';查看数据库是否开启增量备份log_bin=ON则为开启log_bin=OFF则为关闭 2 .修改mysql配置文件mysql. ...
- 【论文笔记】Recommendations as Treatments: Debiasing Learning and Evaluation
Recommendations as Treatments: Debiasing Learning and Evaluation Authors: Tobias Schnabel, Adith Swa ...
- 在对话框中设置前置任务(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 在[任务信息]中的[前置任务]选项卡中设置,这是最古板的法子. 至于[任务信息]这个对话框从哪里去找,这--这么久了,不会 ...
- C语言程序设计:二分查找(折半查找)
目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...
- java 多线程:线程安全问题,示例DateFormat多线程执行冲突解决方案ThreadLocal、方法内变量
SimpleDateFormat多线程中执行报错 java.lang.NumberFormatException: For input string: "" import ja ...