pythonic的标记语言

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

YAML是一个可读性高,用来表达数据序列化的格式。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重命名。

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

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

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

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

  3. 纯量(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学习总结的更多相关文章

  1. HTML标记语言篇--学习笔记01

    HTML标记语言篇 第1章  HTML基础 1.1 基本概念 WWW 是"World Wide Web"(全球广域网)的缩写,简称为Web,中文又称为"万维网" ...

  2. reStructuredText - 一个比MarkDown更好用的标记语言

    文档和教程 http://docutils.sourceforge.net/rst.html http://zh-sphinx-doc.readthedocs.io/en/latest/rest.ht ...

  3. 面向内容的标记语言--markdonw

    引言: 我们习惯用html来展示数据,尤其是结合了js以及css之后,更是让html变得非常的绚丽,可是有些时候在感受绚丽的同时,我们往往对我们本身想要了解的内容变得漠不关心了,其实并不是所有的知识都 ...

  4. 学习使用Markdown标记语言

    学习如何使用Markdown进行文本编辑 使用教程   大家若是经常逛Github,就知道其中有一个文件叫做README.MD.我一开始也不知道这个.MD是什么意思,后来我自己写了一次,就知道了这一种 ...

  5. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  6. R语言可视化学习笔记之添加p-value和显著性标记

    R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline   上篇文章中提了一下如何通过ggpubr ...

  7. yaml标记语言的简介

    今天遇到yml这个文件,挺懵的.也是百度了一把. 这篇博文不错:http://www.ibm.com/developerworks/cn/xml/x-1103linrr/ 这图画得不错:http:// ...

  8. CoffeeScript及相关文本标记语言

    粗步看了下CoffeeScript(简称cs),发现cs这玩意还是有些问题,当然最大的问题之一是缺乏称手的工具.要是能放VS里编译调试当然好.但是转来转去的,真不如直接多敲几个JS字符串. 问题之二就 ...

  9. Markdown 轻量级标记语言

    1.Markdown 语言 1.1 Markdown 简介 Markdown 是一种轻量级的标记语言,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷 ...

随机推荐

  1. [07/18NOIP模拟测试5]超级树

    鬼能想到的dp定义:dp[i][j]表示在一棵i级超级树中,有j条路径同时存在且这j条路径没有公共点时,可能的情况数 刚开始我也没看懂,所以举个例子 如一个2级的超级树,父节点为1,左右儿子为2,3 ...

  2. zookeeper集群搭建2.7

    http://blog.csdn.net/uq_jin/article/details/51513307

  3. 数组去重(高效率,ES6才支持)

    //数组去重 function distinct(arr) { let result = []; let obj = {}; for(let i of arr) { if(!obj[i]) { res ...

  4. spring security 简单入门

    spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...

  5. C#索引器与数组的区别

    1.索引器的索引值类型不限定为整数 2.索引器允许重载 3.索引器不是一个变量 4.索引器以函数签名方式this标识,而属性采用名称来标识,名称可以任意 5.索引器不能使用static来进行声明,属性 ...

  6. MySQL的安装+可视化工具+JDBC的增删改查

    1.Mysql和可视化工具的安装 安装包网上有很多资源.这里推荐一个我一直在用的学习网站,上面有提供安装包和详细的说明. http://how2j.cn/k/mysql/mysql-install/3 ...

  7. pat 1054 The Dominant Color(20 分)

    1054 The Dominant Color(20 分) Behind the scenes in the computer's memory, color is always talked abo ...

  8. pat 1011 World Cup Betting(20 分)

    1011 World Cup Betting(20 分) With the 2010 FIFA World Cup running, football fans the world over were ...

  9. 半自动安装 linux 系统

    基于图形软件生成应答文件,实现半自动化安装 linux 操作系统 1.yum install -y system-config-kickstart 安装生成自动化安装操作系统的应答文件 2.syste ...

  10. 力扣(LeetCode)缺失数字 个人题解

    给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2 ...