1.什么是YAML?
YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。
2.语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 以#号作为注释符
3.数据结构
- 列表,数组(一串类型相同或者不同的组合)
- 纯量(类似于原子性,不可再分)
- 对象(键值对的组合,一对一的特性)
4.列表、数组
- 数组1 - 数组2 - 数组3 - 数组4 - 数组5
5.原子量
也即是纯量,不能再细分的数据结构。类比其他的编程语言,YAML也充分地考虑到了这一点。
-
数值型: 直接书写即可。不区分整型还是浮点型。
-
字符串: 字符串可以加引号,也可以不加。还有相关于换行什么的更多特殊的用法,这里强烈建议阅读以下阮一峰老师的这篇文章:
http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt -
- 单引号内会自动的转义特殊字符,对单引号转义是使用两个单引号,其表示一个原生的单引号。
- 双引号内保持原字符不变。
-
日期,时间:
-
- 时间: ISO8601 格式。如
2001-12-14t21:59:43.10-05:00
- 日期: 采用复合 iso8601 格式的年、月、日表示。如
1970-01-01
- 时间: ISO8601 格式。如
-
关于强制类型转换: 可以通过两个英文感叹号+新的数据类型的方式来进行强制的类型转换。
6.yaml简单操作
test.yaml
1 bind1: 2 hostname: server1 3 remote_users: 4 - user1: 5 username: root 6 auth_type: ssh-key 7 #password: 123 8 - user2: 9 username: alex 10 auth_type: ssh-passwd 11 password: alex3714 12 groups: 13 - bj_group 14 user_profiles: 15 - alex 16 17 bind2: 18 hostname: server2 19 remote_users: 20 - user1: 21 username: alex 22 auth_type: ssh-passwd 23 password: alex3714 24 groups: 25 - bj_group 26 - sh_group 27 28 user_profiles: 29 - rain
load
1 import yaml 2 f = open("test.yaml", "r") 3 y = yaml.load(f) 4 for k, v in y.items(): 5 print(k, v) 6 7 """ 8 bind2 {'hostname': 'server2', 'groups': ['bj_group', 'sh_group'], 'user_profiles': ['rain'], 'remote_users': [{'user1': None, 'password': 'alex3714', 'auth_type': 'ssh-passwd', 'username': 'alex'}]} 9 bind1 {'hostname': 'server1', 'groups': ['bj_group'], 'user_profiles': ['alex'], 'remote_users': [{'user1': None, 'auth_type': 'ssh-key', 'username': 'root'}, {'user2': None, 'auth_type': 'ssh-passwd', 'password': 'alex3714', 'username': 'alex'}]} 10 """