编程免不了要写配置文件,怎么写配置也是一门学问。

    YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

    YAML在python语言中有PyYAML安装包,下载地址:https://pypi.python.org/pypi/PyYAML

  一、简介

    YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

    它的基本语法规则如下:

    1、大小写敏感

    2、使用缩进表示层级关系

    3、缩进时不允许使用Tab键,只允许使用空格。

    4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

    5、# 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样

    YAML 支持的数据结构有三种:

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

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

    3、纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

  二、字符串

    

#######################################字符串##############################################
#1、字符串默认不使用引号表示
str1: 这是一个字符串 #2、如果字符串之中包含空格或特殊字符,需要放在引号之中。
str2: '内容: *字符串' #3、单引号和双引号都可以使用,双引号不会对特殊字符转义。
str3: '内容\n字符串'
str4: "content\n string" #4、单引号之中如果还有单引号,必须连续使用两个单引号转义。
s3: 'labor''s day' #5、字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
strline: 这是一段
多行
字符串 #6、多行字符串可以使用|保留换行符,也可以使用>折叠换行
this: |
Foo
Bar
that: >
Foo
Bar #7、+表示保留文字块末尾的换行,-表示删除字符串末尾的换行。
s4: |
Foo4
s5: |+
Foo5
s6: |-
Foo6
s7: |
Foo7

  

  三、对象

###################################对象####################
#1、对象的一组键值对,使用冒号结构表示。
animal: pets #{'animal': 'pets'}
#
##2、Yaml 也允许另一种写法,将所有键值对写成一个行内对象
dict1: { name: Steve, foo: bar } #{'dict1': {'foo': 'bar', 'name': 'Steve'}}

  四、数组

####################################数组###################

# 1、数组可以采用行内表示法。
animal: [Cat, Dog] #{'animal': ['Cat', 'Dog']} #2、一组连词线开头的行,构成一个数组。
animal1:
- Cat
- Dog
- Goldfish # {'animal1': ['Cat', 'Dog', 'Goldfish']}

  五、复合结构

############################复合结构##########################
#对象和数组可以结合使用,形成复合结构 languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
#{'languages': ['Ruby', 'Perl', 'Python'], 'websites': {'Python': 'python.org', 'YAML': 'yaml.org', 'Ruby': 'ruby-lang.org', 'Perl': 'use.perl.org'}} db:
host: xxx
port: 3306
user: weibospider
password: xxx
db_name: weibo
db_type: mysql #{'db': {'host': 'xxx', 'db_name': 'weibo', 'user': 'weibospider', 'db_type': 'mysql', 'password': 'xxx', 'port': 3306}}

  六、纯量

##########################纯量#############################
#1、数值直接以字面量的形式表示
number: 12.30 #{'number': 12.3} #2、布尔值用true和false表示
isSet: true #{'isSet': True}
isSet1: false #{'isSet1': False} 3、null用~表示
parent: ~ #{'parent': None} #4、时间采用 ISO8601 格式。
time1: 2001-12-14t21:59:43.10-05:00 #{'time1': datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)} ##5、日期采用复合 iso8601 格式的年、月、日表示。
date: 2017-07-31 #{'date': datetime.date(2017, 7, 31)} #6、YAML 允许使用两个感叹号,强制转换数据类型。
int_to_str: !!str 123 #{'bool_to_str': 'true'}
bool_to_str: !!str true #{'bool_to_str': 'true'}

  七、YAML应用

    这里主要是记录一下YAML在Python语言中的应用。类比于json库,yaml库与其有惊人的相似之处。一个load方法,一个dump方法。顾名知义,也比较的好理解。

# coding:utf-8
import os import sys
reload(sys)
sys.setdefaultencoding('utf8') from yaml import load
config_path = os.path.join(os.path.dirname(__file__), 'tt.yaml') with open(config_path,'rb') as f:
cont = f.read() cf = load(cont) print cf.get('db')
# 输出:{'host': 'xxx', 'db_name': 'weibo', 'user': 'weibospider', 'db_type': 'mysql', 'password': 'xxx', 'port': 3306}
print '------------------' print cf # 输出:
'''
{'
dict1': {'foo': 'bar', 'name': 'Steve'},
'animal1': ['Cat', 'Dog', 'Goldfish'],
'parent': None,
'bool_to_str': 'true',
'db': {'host': 'xxx', 'db_name': 'weibo', 'user': 'weibospider', 'db_type': 'mysql', 'password': 'xxx', 'port': 3306},
'number': 12.3,
'websites': {'Python': 'python.org', 'YAML': 'yaml.org', 'Ruby': 'ruby-lang.org', 'Perl': 'use.perl.org'},
'time1': datetime.datetime(2001, 12, 15, 2, 59, 43, 100000),
'languages': ['Ruby', 'Perl', 'Python'],
'animal': ['Cat', 'Dog'],
'date': datetime.date(2017, 7, 31),
'int_to_str': '123',
'isSet': True,
'isSet1': False}
'''

  参考文档:http://www.ruanyifeng.com/blog/2016/07/yaml.html

YAML 在Python中的应用的更多相关文章

  1. yaml在python中的应用简单整理

    #简单介绍============================================================== YAML使用寄主语言的数据类型,这在多种语言中流传的时候可能会引 ...

  2. YAML 在Python中的配置应用

    环境搭建 YAML语法 语法规则 数据结构 列表数组 原子量 YAML应用 案例 load dump 总结 YAML是一个堪比XML,JSON数据格式的更加方便,简洁的,易于人眼阅读的序列化数据格式. ...

  3. Python基础(八) yaml在python中的使用

    yaml 通常用来存储数据,类似于json YAML 简介 YAML(Yet Another Markup Language),一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅 ...

  4. python 中读取yaml

    YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. YAML在python语言中有PyYAML安装包. YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类 ...

  5. Python中yaml和json文件的读取和应用

    Python对yaml和json文件的读取: yaml文件读取: 首先创建一个yaml文件test.yaml import yaml   #引入包 f=open(path)  #建立Python的文件 ...

  6. Python 中的 10 个常见安全漏洞,以及如何避免(上)

    简评:编写安全代码很困难,当你学习一个编程语言.模块或框架时,你会学习其使用方法. 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中,也存在用于编写应用的不良实践.然而 ...

  7. Python 中的 10 个常见安全漏洞,以及如何避免(下)

    简评:编写安全代码很困难,当你学习一个编程语言.模块或框架时,你会学习其使用方法. 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中,也存在用于编写应用的不良实践.然而 ...

  8. Python中logging模块的基本用法

    在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...

  9. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

随机推荐

  1. 2-SAT学习整理

    关于2-SAT 问题给出的证明和思路就不再赘述 核心是对于问题给出的条件建图,然后跑tarjan缩点 (在一个强联通分量里bool值是相同的) 看集合两个元素是否在一个强联通分量来判断是否合法 利用强 ...

  2. Where to Run LightOJ - 1287(概率dp)

    Where to Run LightOJ - 1287(概率dp) 题面长长的,看了半天也没看懂题意 不清楚的地方,如何判断一个点是否是EJ 按照我的理解 在一个EJ点处,要么原地停留五分钟接着走,要 ...

  3. 【HDU 5961 传递】

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission ...

  4. ACM童年生活二三事

    描述 Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去. 但年幼的他一次只能走上一阶或者一下子蹦上两阶. 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几 ...

  5. Linux机器-网卡磁盘监控

    1)实时监控网卡流量的通用脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  6. [ CodeVS冲杯之路 ] P1154

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1154/ 由于所有珠子连成一个环,所以要进行预处理,直接将整个值往后复制 n 位,即 a[i+n]=a[i] 设 f[i ...

  7. php 计算函数执行时间的方法及获得微妙的方法

    // 获得微妙方法 function getMillisecond() { list($s1, $s2) = explode(' ', microtime()); return (float)spri ...

  8. 小红帽的画笔(NOIP模拟赛Round 7)

    又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...

  9. UVA 11324 The Largest Clique(缩点+DAG上的dp)

    求最大团.和等价性证明有类似之处,只不过这个不是求互推,而是只要a->b,或b->a即可. 同样的,容易想到先缩点,得到DAG,每个节点上保存SCC的点数,相信任意一条由根节点(入度为零) ...

  10. android 错误

    问题1 手机开发者选项 开启USB安装 问题2 怎么变成了两行 问题3 运行虚拟机报错 电脑没有启用虚拟技术或者没有安装Intel HAXM软件 sdk下找到 (或者官网下载 https://soft ...