更适合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语言神似。

让我们再来看看Yaml的数据类型:
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
介绍了这么多,让我们先来一起学习下Yaml的语法…
Yaml语法学习
下面我们针对Yaml的集中类型,进行逐一学习。需要注意的是,Yaml的结构标识符前无需添加空格,但标识符后需要添加一个空格,比如:

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

对象

纯量
我们需要明确纯量的定义:单个的,不可拆分的值,这句话尤为重要。
纯量默认是无需添加引号的,但正如上面说的,当它可能出现被拆分的情况时,我们需要将它放在引号中。
引号的使用类似Linux,单引号和双引号都可以使用,双引号不会对特殊字符转义。
下面集中列举可能出现的情况:
关于引用
Yaml支持数据集之间的引用,&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。

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.
所以我们有以下方式解决:
添加Loader
info = 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

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

可以看到,读写都没有问题,但yaml将我们之前的引用,进行了重写…但无伤大雅。
The End
OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点赞。
期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
作者:清风Python
更适合Pythoner的标记语言Yaml学习总结的更多相关文章
- HTML标记语言篇--学习笔记01
HTML标记语言篇 第1章 HTML基础 1.1 基本概念 WWW 是"World Wide Web"(全球广域网)的缩写,简称为Web,中文又称为"万维网" ...
- reStructuredText - 一个比MarkDown更好用的标记语言
文档和教程 http://docutils.sourceforge.net/rst.html http://zh-sphinx-doc.readthedocs.io/en/latest/rest.ht ...
- 面向内容的标记语言--markdonw
引言: 我们习惯用html来展示数据,尤其是结合了js以及css之后,更是让html变得非常的绚丽,可是有些时候在感受绚丽的同时,我们往往对我们本身想要了解的内容变得漠不关心了,其实并不是所有的知识都 ...
- 学习使用Markdown标记语言
学习如何使用Markdown进行文本编辑 使用教程 大家若是经常逛Github,就知道其中有一个文件叫做README.MD.我一开始也不知道这个.MD是什么意思,后来我自己写了一次,就知道了这一种 ...
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...
- R语言可视化学习笔记之添加p-value和显著性标记
R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr ...
- yaml标记语言的简介
今天遇到yml这个文件,挺懵的.也是百度了一把. 这篇博文不错:http://www.ibm.com/developerworks/cn/xml/x-1103linrr/ 这图画得不错:http:// ...
- CoffeeScript及相关文本标记语言
粗步看了下CoffeeScript(简称cs),发现cs这玩意还是有些问题,当然最大的问题之一是缺乏称手的工具.要是能放VS里编译调试当然好.但是转来转去的,真不如直接多敲几个JS字符串. 问题之二就 ...
- Markdown 轻量级标记语言
1.Markdown 语言 1.1 Markdown 简介 Markdown 是一种轻量级的标记语言,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷 ...
随机推荐
- 【java基础】程序员你真的理解反射机制吗?
目录 前言 1.反射的概述 2.正式使用反射之前很有必要了解的Class类 3.反射的使用 前言 很多讲解反射的博客文章并没有详细讲解Class类,~当然包括之前的我也一样~,这样的文章只会让反射徒有 ...
- Spring MVC-------文件上传,单文件,多文件,文件下载
Spring MVC 框架的文件上传是基于 commons-fileupload 组件的文件上传,只不过 Spring MVC 框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现,取消了 ...
- Tomcat+nginx+Keepalived部署实现集群
Tomcat+nginx+Keepalived部署实现集群 环境说明: 系统:Centos-7 主机:Centos-7 x3 IP地址: 服务器1(192.168.10.102/24) 服务器2(19 ...
- ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型
1. 面向消息的中间件 1.1 什么是MOM 面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流 ...
- 【Spring】Spring的定时任务注解@Scheduled原来如此简单
1 简介 定时任务的实现非常多,JDK的Timer.Spring提供的轻量级的Scheduled Task.QuartZ和Linux Cron等,还有一些分布式的任务调度框架.本文主要介绍Schedu ...
- 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...
- UNIX env查找技巧
在一些UNIX系统上,也许可以避免硬编码Python解释器的路径,而可以在文件特定的第一行注释中这样写: #!/usr/bin/env python ... script goes here ... ...
- ZeroC ICE源代码中的那些事 - 嵌套类和局部类
使用嵌套类(类中定义的类,c++没有静态类)或局部类(在函数或成员方法中定义的类),进行行为模式的委托(委托请求)或异步 . java中嵌套类和局部类隐式完成了你对外部对象(实例)访问的私有堆栈的初始 ...
- 浅谈Linux中的各种锁及其基本原理
本文首发于:https://mp.weixin.qq.com/s/Ahb4QOnxvb2RpCJ3o7RNwg 微信公众号:后端技术指南针 0.概述 通过本文将了解到如下内容: Linux系统的并行性 ...
- 面试官:你连RESTful都不知道我怎么敢要你?
目录 01 前言 02 RESTful的来源 03 RESTful6大原则 1. C-S架构 2. 无状态 3.统一的接口 4.一致的数据格式 4.系统分层 5.可缓存 6.按需编码.可定制代码(可选 ...