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规定要使用一个叫 ...
随机推荐
- centos7.4 64位安装 redis-4.0.0
1. 下载 redis 包 链接:https://pan.baidu.com/s/1g1UE_GTreXoD9uOXB7G3HA 提取码:ug8p 2. 安装gcc.ruby .rubygems等环 ...
- 什么是maven(一)
转自博主--一杯凉茶 我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于m ...
- 【Fastjson】Fastjson反序列化由浅入深
Fastjson真-简-介 fastjson是由alibaba开发并维护的一个json工具,以其特有的算法,号称最快的json库 fastjson的使用 首先先创一个简单的测试类User public ...
- 【.NET 与树莓派】WS28XX 灯带的颜色渐变动画
在上一篇水文中,老周演示了 WS28XX 的基本使用.在文末老周说了本篇介绍颜色渐变动画的简单实现. 在正式开始前,说一下题外话. 第一件事,最近树莓派的价格猛涨,相信有关注的朋友都知道了.所以,如果 ...
- 例外日期(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 日历无论怎么样自定义,只要仍是存在固化规律的,就铁定会坏事,因为人类的历史就是在大规律中掺杂着无数无规律,再由无数无规律凝 ...
- 第四届“传智杯”全国大学生IT技能大赛题解
目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...
- 解决Tensorflow ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type numpy.ndarray)
问题描述 在将一个数组送入tensorflow训练时,报错如下: ValueError: Failed to convert a NumPy array to a Tensor (Unsupporte ...
- 误入 GitHub 游戏区,意外地收获颇丰
这天中午,我和往常一样就着美食视频吃完午饭,然后起身泡了一杯"高沫". 我闻着茶香享受着午后的阳光,慵懒地坐在工位上习惯性的打开 GitHub 游荡,酝酿着睡意. 误打误撞,我来到 ...
- CF108A Palindromic Times 题解
Content 现在是 \(h\) 时 \(m\) 分,请求出在此之后(不包含此时)的第一个回文时间. 数据范围:\(0\leqslant h\leqslant 23,0\leqslant m\leq ...
- CF78B Easter Eggs 题解
Content 有一个有 \(n\) 个点的环,你可以将其染成一种颜色.一共有 \(7\) 种颜色(R,O,Y,G,B,I,V)可以选择.你的染色方案应该满足下面的要求: 每一个点都要被染色,且 \( ...