将servlet[login]标记为不可用_更适合Pythoner的标记语言Yaml学习总结

pythonic的标记语言

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

YAML是一个可读性高,用来表达数据序列化的格式。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。
YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重命名。

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

b80b9a30dbd3c436ad706f7f1d250814.png

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

  1. 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  2. 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  3. 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

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

Yaml语法学习

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

50ab61738563ef798cd7154f1e322e49.png

数组

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

4509ea28b0a3973f38d34790a86bfa1f.png

对象

81a32d936598dc7e76b8316043bd82f1.png

纯量

我们需要明确纯量的定义:单个的,不可拆分的值,这句话尤为重要。
纯量默认是无需添加引号的,但正如上面说的,当它可能出现被拆分的情况时,我们需要将它放在引号中。
引号的使用类似Linux,单引号和双引号都可以使用,双引号不会对特殊字符转义。
下面集中列举可能出现的情况:

fa9dde7aa94e159853f6678c0806b5e9.png

关于引用

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

816d9e31511994bed0af6259fdfb1971.png

Python使用Yaml

写了这么多Yaml的知识,可Python怎么能与Yaml进行交互呢?使用Pyyaml。
安装: pip install pyyaml
导入: import yaml
至于操作,简直不要太简单… yaml只有两个方法load、dump,而且使用完全和json模块一样。但真的如此吗?显然不是…

Yaml安全告警

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

YAMLLoadWarning: calling yaml.load() without Loader=… is deprecated, as the default Loader is unsafe. Please
read https:// msg.pyyaml.org/load for full details.
所以我们有以下方式解决:
  • 添加Loaderinfo = yaml.load(data,Loader=yaml.SafeLoader)
  • 使用语法糖info = yaml.safe_load(data)

Yaml文件特性

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

yaml.composer.ComposerError: expected a single document in the stream but found another document

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

示例

为了能让大家更多的熟悉方法,我们就写一个没什么用的Yaml单文件与多文件解析器吧。
先拷贝上面的示例,编写两个简单的yaml文件:
breeze_single.yaml

49e1070ce559bfcdc8e998050a829d4c.png

breeze.yaml

62c1dcb4b108b6886fb2d0a73baca9a0.png

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

2c1ec377a5d7680a134540d19c6df715.png

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

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

更多精彩内容,请滑至顶部点击右上角关注小宅哦~

3de5268224dfa222af8bed528481963c.png

作者:清风Python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值