更适合Pythoner的标记语言Yaml总结

举报
技术火炬手 发表于 2019/09/03 15:07:05 2019/09/03
【摘要】 之前总结过一篇关于小数据存储文件大比拼,当时着重介绍了json,因为它在各类编程语言的通用性较强。但今天,我想给大家介绍一款更加适合pythoner使用的语言Yaml。

年轻人的状态

image.png

有多少人和这张图一样,每天清晨起床时,都后悔昨晚不该熬夜,决定以后晚上早点睡觉。结果到了晚上,照样一副 欲上九天揽月,下四海捉鳖的精神面貌…

pythonic的标记语言

之前总结过一篇关于小数据存储文件大比拼,当时着重介绍了json,因为它在各类编程语言的通用性较强。但今天,我想给大家介绍一款更加适合pythoner使用的语言Yaml。

image.png

之所以说它更适合pythoner使用,是因为Yaml在很多方面都与python语言神似。

image.png

让我们再来看看Yaml的数据类型:

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

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

  3. 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

介绍了这么多,让我们先来一起学习下Yaml的语法…

Yaml语法学习

下面我们针对Yaml的集中类型,进行逐一学习。需要注意的是,Yaml的结构标识符前无需添加空格,但标识符后需要添加一个空格,比如:

image.png

数组

之所以先介绍数组,是因为这个数据类型最简单…

image.png

对象

image.png

纯量

我们需要明确纯量的定义:单个的,不可拆分的值,这句话尤为重要。

纯量默认是无需添加引号的,但正如上面说的,当它可能出现被拆分的情况时,我们需要将它放在引号中。

引号的使用类似Linux,单引号和双引号都可以使用,双引号不会对特殊字符转义。

下面集中列举可能出现的情况:

image.png

关于引用

Yaml支持数据集之间的引用,&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。

image.png

Python使用Yaml

写了这么多Yaml的知识,可Python怎么能与Yaml进行交互呢?使用Pyyaml。

安装: pip install pyyaml

导入: import yaml

至于操作,简直不要太简单… yaml只有两个方法load、dump,而且使用完全和json模块一样。但真的如此吗?显然不是…

Yaml安全告警

由于Yaml数据存在安全隐患,在使用pyyaml进行load时,会给出提示:

image.png

Yaml文件特性

由于Yaml文件可以使用三个短横杠 --- 在一个文件中保存多个Yaml文档内容,所以Yaml的方法额外多出了load_all dump_all两种方法。但这里有个问题,如果使用load_all加载单个文档,没有问题,但如果使用load加载多个文档,则会提示:

image.png

所以,无脑的简单粗暴,直接使用load_all与dump_all。当然,如果为了写着练习,可以判断文件后,单文件返回dict,如果多文件将迭代器转化为list后进行返回…

示例

为了能让大家更多的熟悉方法,我们就写一个没什么用的Yaml单文件与多文件解析器吧。

先拷贝上面的示例,编写两个简单的yaml文件:

breeze_single.yaml

image.png

breeze.yaml

image.png

现在让我们解析打印这两个yaml,最终再回写两个new_xxx的yaml文件吧。

640.jpg

可以看到,读写都没有问题,但yaml将我们之前的引用,进行了重写…但无伤大雅。

The End

本文来自“清风Python”欢迎关注


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。