上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法。

一,注意

这里首先要更正一下网上大部分博客的说法:使用PyYAML写入时不是yaml的标准形式。例如使用PyYAML将字典嵌套字典的数据写入yaml文件时,写入的yaml文件里会出现带{}的数据。实际我在写代码的过程中发现PyYAML5.3.1版本并不会出现这种情况。如下所示:

使用PyYAML库写入yaml文件

# @author: 给你一页白纸

import yaml

data = {
"str": "Hello world.",
"int": 110,
"list": [10, "she", ["he", "it"]],
"dict": {"account":"xiaoqq", "password": {"pwd1": 123456, "pwd2": "water"}},
"tuple": (100, "a")
} with open('./writeYamlData.yml', 'w', encoding='utf-8') as f:
yaml.dump(data=data, stream=f, allow_unicode=True)

写入后的yaml文件内容如下:

dict:
account: xiaoqq
password:
pwd1: 123456
pwd2: water
int: 110
list:
- 10
- she
- - he
- it
str: Hello world.
tuple: !!python/tuple
- 100
- a

二,安装ruamel.yaml库

安装命令:

pip install ruamel.yaml
# 安装速度慢则加上镜像源
pip install ruamel.yaml -i https://pypi.tuna.tsinghua.edu.cn/simple

使用时导入:

from ruamel import yaml

三,ruamel.yaml写入yaml文件

使用yaml.dump()方法写入,代码展示如下:

# @author: 给你一页白纸

from ruamel import yaml

data = {
"str": "Hello world.",
"int": 110,
"list": [10, "she", ["he", "it"]],
"dict": {"account":"xiaoqq", "password": {"pwd1": 123456, "pwd2": "water"}},
"tuple": (100, "a")
} # path为yaml文件的绝对路径
path ='./writeYamlData.yml' with open(path, 'w', encoding='utf-8') as f:
yaml.dump(data, f, Dumper=yaml.RoundTripDumper)

写入结果如下:

str: Hello world.
int: 110
list:
- 10
- she
- - he
- it
dict:
account: xiaoqq
password:
pwd1: 123456
pwd2: water
tuple:
- 100
- a

注意:这里yaml.dump()里加上l了参数Dumper=yaml.RoundTripDumper。不加该参数则写入结果如下:

dict:
account: xiaoqq
password: {pwd1: 123456, pwd2: water}
int: 110
list:
- 10
- she
- [he, it]
str: Hello world.
tuple: !!python/tuple [100, a]

四,ruamel.yaml读取yaml文件

yaml文件数据如下:

dict:
account: xiaoqq
password:
pwd1: 123456
pwd2: water
int: 110
list:
- 10
- she
- - he
- it
str: Hello world.
tuple: !!python/tuple
- 100
- a

使用yaml.load()方法读取,代码展示如下:

# @author: 给你一页白纸

from ruamel import yaml

# path为yaml文件的绝对路径
path ='./writeYamlData.y' with open(path, 'r', encoding='utf-8') as doc:
content = yaml.load(doc, Loader=yaml.Loader)
print(content)

读取结果如下:

C:\Users\xiaoqq\AppData\Local\Programs\Python\Python37\python.exe C:/Users/xiaoqq/Desktop/test_project/readYaml.py
{'dict': {'account': 'xiaoqq', 'password': {'pwd1': 123456, 'pwd2': 'water'}}, 'int': 110, 'list': [10, 'she', ['he', 'it']], 'str': 'Hello world.', 'tuple': (100, 'a')} Process finished with exit code 0

ruamel.yaml库继承子PyMYAL库,读写方法基本相同,目前来说可以根据自己的习惯选择使用 ruamel.yaml 还是 PyMYAL 进行yaml文件的读写操作。

Python基础笔记2-ruamel.yaml读写yaml文件的更多相关文章

  1. Python基础笔记系列十一:标准输入输出、文件读写和指针等操作

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...

  2. Python基础笔记系列一:基本工具与表达式

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 工具基础(Windows系统下)传送门:Python基础笔记系列四:工具的 ...

  3. python基础 实战作业 ---Excel基本读写与数据处理

    代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...

  4. Python基础笔记1-Python读写yaml文件(使用PyYAML库)

    最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,为了方便后续使用,决定记下笔记. 一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目 ...

  5. 我的Python基础笔记

    Python是从刚开始参加工作,就有听各方面的测试大牛推崇,但是刚开始做测试时还是把基础的测试方法放在第一位来学习的,直到半年多以后才开始接触Python. 我的Python基础主要是以廖雪峰老师的在 ...

  6. Python基础笔记系列十四:python无缝调用c程序

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! python语言可以对c程序代码进行调用,以弥补python语言低性能的缺 ...

  7. Python基础笔记1

    这篇笔记来自廖雪峰的Python教程. 一.Python基础 Python使用缩进来组织代码块,务必遵守约定俗成的习惯,坚持使用4个空格的缩进. 在文本编辑器中,需要设置把Tab自动转换为4个空格,确 ...

  8. python基础笔记-0

    python中数据结构,主要有列表.元组.字典.集合. python中最基本数据结构是序列(sequence).序列中每个元素被分配一个序号——即元素位置,也成为索引.第一个索引是0,第二个是1,以此 ...

  9. python基础(三)----字符编码以及文件处理

      字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程   字符--------(翻译过程)------->数字   这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之 ...

随机推荐

  1. Thymeleaf 中如何实现including

    Problem:Jsp中有including,Thymeleaf中有无类似的语法? Solution:有,Themeleaf中提供同样功能的标签是 th:fragment="blockNam ...

  2. 在Win10上安装Apache2.44

    下载地址:https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.41-win64-VS16.zip 如果以上地址失效请到 http ...

  3. LAMP 和 LNMP

    #0x01 组成: LAMP==Linux+Apache+Mysql+PHP LNMP==Linux+Nginx+Mysql+PHP LANMP==linux + nginx + apache + m ...

  4. Solaris – configure ftp server

    SUN Solaris FTPSUN Solaris comes with ftp daemon based on WU-FTPd Washington University project.Whil ...

  5. ES 实现实时从Mysql数据库中读取热词,停用词

    IK分词器虽然自带词库 但是在实际开发应用中对于词库的灵活度的要求是远远不够的,IK分词器虽然配置文件中能添加扩展词库,但是需要重启ES 这章就当写一篇扩展了 其实IK本身是支持热更新词库的,但是需要 ...

  6. adb命令—monkey篇

    monkey 目录 monkey 1.Monkey介绍 2.Monkey是用来做什么的 3.Monkey程序介绍 下面就是一些Monkey命令了 1.Monkey介绍 顾名思义,Monkey就是猴子, ...

  7. springboot、Thymeleaf、国际化的简单使用

    1.项目体系结构 (1)知识体系 springboot:省去了很多繁琐的配置,如:视图解析器.前端控制器等 thymeleaf:获取controller数据逼能够进行展示 集合:用于存储数据,此练习没 ...

  8. 原生post请求

    ajax: function(opt) { opt = opt || {}; opt.method = opt.method.toUpperCase() || 'POST'; opt.url = op ...

  9. php Zookeeper使用踩坑

    用的是Zookeeper扩展,Php版本为7.2.17,下载地址: https://pecl.php.net/package/zookeeper 用的是0.6.4版本 创建节点官方给的示例如下: &l ...

  10. 360 Atlas生产环境使用心得

    一.Atlas介绍 Atlas是360开源的一个Mysql Proxy,以下是官方介绍: Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 ...