python生成yaml文件_Python实践34-读写yaml文件

关于yaml

YAML语言的设计目标,就是方便人类读写。如果你想要实现一些用ini不好做到的配置,可以使用yaml格式作为配置文件

大小写敏感

使用缩进表示层级关系

缩进时不允许使用Tab键,只允许使用空格。

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

yaml数据结构

YAML 支持的数据结构有三种。

对象

键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

对象的一组键值对,使用冒号结构表示。

数组

一组按次序排列的值,又称为序列(sequence) / 列表(list)

一组连词线开头的行,构成一个数组。

纯量(scalars)

单个的、不可再分的值

包括字符串,布尔值,整数,浮点数,Null,时间,日期

一个yaml文件

name: John Smith

age: 37

spouse:

name: Jane Smith

age: 25

children:

- name: Jimmy Smith

age: 15

- name: Jenny Smith

age: 12

和它对应的json文件如下:

{ name: 'John Smith',

age: 37,

spouse: { name: 'Jane Smith', age: 25 },

children:

[ { name: 'Jimmy Smith', age: 15 },

{ name: 'Jenny Smith', age: 12 } ]

}

读写yaml文件

import yaml

if __name__ == "__main__":

with open('father.yml') as f:

content = yaml.load(f)

# output:

print(type(content))

print(content)

content.update({'age': 38})

print(content)

with open('PyYAML.yml', 'w') as nf:

yaml.dump(content, nf)

生成的新yaml文件形式如下:

age: 38

children:

- {age: 15, name: Jimmy Smith}

- {age: 12, name: Jenny Smith}

name: John Smith

spouse: {age: 25, name: Jane Smith}

仔细一看,跟原yaml文件不像嘛,尤其是几个大括号,很刺眼,这可怎么办?

使用ruamel.yaml代替PyYAML

解决方法就是使用ruamel.yaml代替PyYAML,因为PyYAML貌似已经不再维护了

安装:pip install ruamel.yaml

使用ruamel.yaml库里面函数参数Loader=ruamel.yaml.RoundTripLoader和Dumper=ruamel.yaml.RoundTripDumper可以用来保持新生成的yaml文件的表现和输入文件一致。代码如下:

from ruamel import yaml

if __name__ == "__main__":

with open('father.yml') as f:

content = yaml.load(f, Loader=yaml.RoundTripLoader)

# output:

print(type(content))

print(content)

content.update({'age': 38})

print(content)

with open('ruamel.yml', 'w') as nf:

yaml.dump(content, nf, Dumper=yaml.RoundTripDumper)

生成新的yaml文件形式如下,正是我们期望的格式:

name: John Smith

age: 38

spouse:

name: Jane Smith

age: 25

children:

- name: Jimmy Smith

age: 15

- name: Jenny Smith

age: 12

代码下载

本文代码已经归档到github,您可以访问下面的链接获得,欢迎star该代码仓库。

代码地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: [BABEL] D:\moblie\web_co

原因: 出现错误是由于babel的版本冲,有两种解决方式: (1). babel-loader 8.x | babel 7.x (升级版本) npm install -D babel-loader babel/core babel/preset-env webpack (2). babel-loader 7.x | babel 6.x (降级版本) npm install -D…

qwt自定义时间标尺TimeScale

需要重载QwtScaleDraw类的virtual QwtText label(double)const;方法 该方法在需要绘制scale label时会调用。 主要思路是标尺上的点对应QDateTime::toTime_t()的值。然后重载label方法,在QwtText label(double v) const 方法中将参数v转化为QDateTime对象&#xff0…

二维数组排序 行与列分别升序_6个经典排序技巧,尤其是最后一个,绝对的个性化...

点击上方"Excel函数公式"免费订阅排序,从字面意思理解就是将一组“无序”的记录调整为“有序”的记录。在Excel中,排序是一种常见的操作,那么,如何高效的完成排序操作呢?一、Excel排序:常规(命令…

java平移变换_java移位运算符:(左移)、(带符号右移)和(无符号右移)。...

1、 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数。 1)它的通用格式如下所示&#xff1a; value << num num 指定要移位值value 移动的位数。 左移的规则只记住一点&#xff1a;丢弃最高位&#xff0c;0补最低位 如果移动的位数超过了该类型的最大位数…

Quantumas,作者太NB了,俺发现俺菜得跟猪一样!!!

前不久一个名为“Quantumas”的3D Demo引起了我们的关注&#xff0c;其作者称“这个引擎整合了各种最先进的渲染技术&#xff0c;在画质上超越了虚幻3&#xff0c;部分超越了CE2”&#xff0c;而我们在这个Demo中也的确看 到了高阶动态范围、多频软阴影、空间环境遮掩、HDR景深…

python制作查询网页_peewee数据查询之分页返回——python学习笔记

请求示例&#xff1a;后端代码# 查询客服列表kf.route("/list", methods[POST])def kf_list():start request.values.get(start)length request.values.get(length)try:find model.py_user_kf.select().order_by(model.py_user_kf.create_time).paginate(int(star…

java薪资年龄交叉表_巧用参数实现交叉表行列互换

对于普通的没有olap分析功能的快逸报表而言&#xff0c;一旦发布到web页面后&#xff0c;其样式就被固定了&#xff0c;如果想把报表换种形式展现通常的做法是重新设计一张报表模板来实现&#xff0c;难道快逸报表就没有一种特殊的方法可以解决这样的需求吗&#xff1f;答案就在…

spring 环境

引用&#xff1a;http://www.189works.com/article-96241-1.html 准备阶段&#xff1a; 到Spring官网下载所需的API包,其中spring-framework-X.X.X.RELEASE-with-docs.zip压缩包需要下载&#xff0c;里面的dist目录下有所需的API,还有一个是com.springsource.org.apache.common…

php 上传多文件_php 多文件上传的实现实例

首先向大家讲解一下实现的方法。要实现多文件上传&#xff0c;我们可以在form表单中添加多个input file域&#xff0c;然后将这些input file的name属性设置为相同的名称且使用数组的形式命名&#xff0c;例如filename[]。至于文件上传的php代码和单个文件上传是一样的道理。下面…

JavaScript代码优化实战之一:缓存变量,关键字过滤

无意中看到某网站的一段JS代码&#xff1a; 1 function clearSearchText(){2 var searchtext document.getElementById("searchwordl").value3 document.getElementById("searchwordl").value"";4 }5 function replaceALL(){6 va…

html.parser python_python模块之HTMLParser

HTMLParser是python用来解析html的模块。它可以分析出html里面的标签、数据等等&#xff0c;是一种处理html的简便途径。 HTMLParser采用的是一种事件驱动的模式&#xff0c;当HTMLParser找到一个特定的标记时&#xff0c;它会去调用一个用户定义的函数&#xff0c;以此来通知程…

php 5.4 aws,使用 Amazon EC2 管理 AWS SDK for PHP 实例 - 适用于 PHP 的 AWS 开发工具包

AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异&#xff0c;请参阅中国的 AWS 服务入门。本文属于机器翻译版本。若本译文内容与英语原文存在差异&#xff0c;则一律以英文原文为准。使用 Amazon EC2 管理 AWS SDK for PHP 实例以下示例演示如何&…

python图片分类毕业设计成果报告书_毕业设计成果报告书模板.doc

毕业设计成果报告书成 果&#xff1a;姓 名&#xff1a;学 号&#xff1a;专 业&#xff1a;区 队&#xff1a;指导老师&#xff1a;二〇XX年X月目  录TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc432664597" 一、选题背景 PAGEREF _Toc432664597 \h 1HYPE…

常用正则表达式例子

1。^\d$  //匹配非负整数&#xff08;正整数 0&#xff09; 2。^[0-9]*[1-9][0-9]*$  //匹配正整数 3。^((-\d)|(0))$  //匹配非正整数&#xff08;负整数 0&#xff09; 4。^-[0-9]*[1-9][0-9]*$  //匹配负整数 5。^-?\d$    //匹配整数 6。^\d(\.\d)?$  //…

msf生成php,使用msfpayload生成后门(asp,aspx,php,jsp,exe)等

msfpayload与msfencode参数说明执行msfpayload -h查看都有哪些参数执行msfencode -h查看都有哪些参数生成backdoor类型可以生成asp、aspx、php、jsp、war、exe等多种类型,下面介绍的使用方法就不一一测试了.msfpayload生成linux backdoor目标机器运行linux2,本机监听下端口,使用…