yaml配置文件

yaml(yet another markup language),是一种以数据为中心,能被电脑和人看懂的数据序列化格式。说白了和xml,json差不多,可以用来序列化、传输数据,或者用作配置文件。

第一次看到yaml,是老师提供的一个scrapy程序中的配置文件,查阅了一些资料后,发现这种数据格式虽然远没有json、xml流行,但是应用相对还是比较广泛的,尤其是用作配置文件。yaml的可读性也是非常好的,而且被计算机解析也是十分简单,未来应用可能会越来越多。

语法简介

语法

yaml和python相似,使用缩进表示语句块层级关系,但是其缩进只允许使用空格,不允许使用tab,同一语句块需要缩进对齐。还有我发现yaml的冒号后面必须有空格,至少在Python中(PyYAML)是这样的。此外,yaml中可以用#表示单行注释。

数据类型

  • 对象 键值对的集合,可以想象成python的字典
  • 数组 可以想象成python的列表
  • 标量 一个数值

标量类型支持

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • null(用~表示)

文字描述其实没什么用,我们直接看例子吧。

yaml例子1 对象

这个例子是我之前看到的一个配置文件。

#爬取的页面
tieba:
  url: http://tieba.baidu.com/f?kw=python3
  name: Python3吧
  id: 35522
#页数
page: 5

使用pyyaml读取看看。

显然,这里整个yaml是一个对象(字典),里面包含两个属性(键值对):page和tieba,tieba的值又是一个对象,对象有三个属性。

注意,上面例子的字符串没有使用引号,是因为yaml中如果字符串没有空格,引号可以省略,但是我建议加上引号。

yaml例子2 数组

languages:
  - "python"
  - "java"
  - "c"

注意数组的写法,-开头,加上一个空格,加上数组的元素。

yaml例子3 对象结合数组

我们自己写一个复杂点的例子,对象和数组结合使用:

name: "Tom"
age: 10
languages:
  - name: "python"
    developer: "Guido van Rossum"
    maintainer: "python.org"
  - name: "java"
    developer: "James Gosling"
    maintainer: "oracle"
  - name: "c"
    developer: "AT&T Bell Laboratory"

在编写的过程中,我发现-后面必须有空格,:后面也必须有空格,否则解析器是报错的。

总结

写这篇笔记前,我还没搞清楚yaml的语法,我是边写笔记边学的,现在大致已经搞清楚yaml的写法了。:-后面要加空格,这个语法着实把我坑了一下。总的来说,有点失望,yaml并不像我想象的那样好写,感觉这个语法规则比xml和json略复杂一些。

python的缩进就是备受争议的,我曾经也因为缩进被文本编辑器弄乱纠结了好一阵子,还好后来使用了pycharm。yaml也用缩进控制语句块,这一点也不太符合我的期望。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。