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. NOIP模拟 7

    考试最后半小时发现T1过不去任何样例,T飞,发现没调用solv函数,挽回40分 考试最后几分钟给T2测了一组自制样例,发现了bug,挽回20分 天- -检查这么重要的么(其实是我第一次打的时候就没验证 ...

  2. 2019.11.11 洛谷月赛t3

    题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...

  3. 02-model设计

    一.项目依赖包安装 1.安装Django(2.2.7) pip3 install django 2.安装DjangoRestFramework 因为DjangoRestFramework是基于Djan ...

  4. JavaScript中BOM与DOM的使用

    BOM: 概念:Browser Object Model 浏览器对象模型 将浏览器的各个组成部分封装成对象. 组成: Window:窗口对象 Navigator:浏览器对象 Screen:显示器屏幕对 ...

  5. 微擎JS资源请求 403

    微擎JS资源请求 403 1.确认JS是否指定 type ==> text/javascript 2.确认src的路径是否正确,{MODULE_URL}项目的根目录带反斜杠 3.实例:(PS:t ...

  6. js json对象操作

    参数解析: sourcelist是json对象[{id:1,name:张三}] targetlist是json对象[{roomid:1}] 返回值list是json对象[{id:1,name:张三,  ...

  7. Lab8:文件系统

    文件系统的概念 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能 文件是具有符号名,由字节序列构成的数据项集合 文件系统的功能 分配文件磁盘空间 管理文件块(位置和顺序) 管理空闲空 ...

  8. gcc在x64体系中如何传递参数,linux,mac,iOS适用

    上一篇介绍了vc(windows)平台在x64体系当中,c函数的传参方式.本篇将要介绍gcc(类linux,mac)平台在x64中,c函数是如何传参的.为节约时间和篇幅,首先来定义一个有十个参数的函数 ...

  9. 前端页面传来数组,后台用对象集合list接收数据的写法

    //保存页面显示应用$("#save").click(function(){ var data = [{"applicationtypeid":"65 ...

  10. ArcGIS 切片与矢量图图层顺序问题

    在项目中有个需求:根据图层索引添加图层 看到这个需求一下子想到 map.addLayer(layer,index?) 接口 但是问题出现了,我切片图加载顺序在矢量图之后就不行! map = new M ...