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 基本语法规则

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用Tab键,只允许使用空格。
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
  6. 列表里的项用"-"来代表,字典里的键值对用":"分隔

YAML 支持的数据结构有3种

  1. 对象:键值对的集合
  2. 数组:一组按次序排列的值,序列(sequence) 或 列表(list)
  3. 纯量(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模块的使用的更多相关文章

  1. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  4. Python标准模块--ContextManager

    1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...

  5. Python标准模块--Unicode

    1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...

  6. Python标准模块--Iterators和Generators

    1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...

  7. 自己实现一个javascript事件模块

    nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...

  8. 理解nodejs模块的scope

    描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...

  9. nodejs模块发布及命令行程序开发

    前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...

随机推荐

  1. 用工具堆砌的DevOps 幻觉

    作者:顾宇 thoughtworks高级咨询师 在第一届 DevOpsDays结束后,DevOps 运动则如星火燎原之势在全球发展开来.随着 DevOps 思想的不断传播,相对的质疑和批评也从未停止过 ...

  2. 联盛德 HLK-W806 (十): 在 CDK IDE开发环境中使用WM-SDK-W806

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  3. mysql 字符串转日期及其他日期转换

    -- 字符串转日期 select str_to_date('2019/1/1', '%Y/%m/%d') -- 2019-01-01 SELECT STR_TO_DATE(concat(Cyear,' ...

  4. 在react项目中实现表格导出为Excel

    需求背景 数据表格有时需要增加导出Excel功能,大多数情况下都是后端出下载接口,前端去调用. 对于数据量少的数据,可以通过前端技术实现,减少后端工作. 实现方式 使用插件--xlsx 根据自己项目情 ...

  5. 8-1yum私有云仓库

    针对centos8的BaseOS.AppStream源 yum -y install httpd systemctl enable --now httpd mkdir -pv /var/www/htm ...

  6. 交通运输类文档下载——JT/T 808-2019、JT/T 809-2019文档分享

    JT/T 808-2019.JT/T 809-2019文档分享 网盘:https://pan.baidu.com/s/1vfgenani8WR3in2lua3qWQ提取码:fktd 官网下载808协议 ...

  7. 【LeetCode】面试题 16.11. 跳水板 Diving Board (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学 日期 题目地址:https://leetcode ...

  8. 【LeetCode】1079. Letter Tile Possibilities 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯 日期 题目地址:https://leetcode ...

  9. 【LeetCode】752. Open the Lock 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...