YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便
YML文件的语法及结构
语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
YAML 支持的数据结构有三种:
-
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
-
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
-
纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
-
dict类型数据
# dict类型
username: admin
password: 123456
输出结果:{'username': 'admin', 'password': 123456}
- dict类型嵌套dict类型
# dict类型
login:
username: admin
password: 123456
logins:
username: admin
password: 123456
输出:{'login': {'username': 'admin', 'password': 123456}, 'logins': {'username': 'admin', 'password': 123456}}
- list类型,前面加上‘-’符号,或者多个’–’
# list类型
username:
- admin
password:
- 123456
- 纯量文本
# 布尔值用true和false表示
isSet: true #{'isSet': True}
isSet1: false #{'isSet1': False}
# null用~表示
parent: ~ #{'parent': None}
# 时间采用 ISO8601 格式。
time1: 2020-08-14t21:59:43.10-05:00 #{'time1': datetime.datetime(2020, 08, 15, 2, 59, 43, 100000)}
# 日期采用复合 iso8601 格式的年、月、日表示。
date: 2020-07-31 #{'date': datetime.date(2020, 7, 31)}
# YAML 允许使用两个感叹号,强制转换数据类型。
int_to_str: !!str 123 #{'bool_to_str': 'true'}
bool_to_str: !!str true #{'bool_to_str': 'true'}
- list嵌套dict
- username: admin
password: 123456
- username: root
password: 654321
输出:[{'username': 'admin', 'password': 123456}, {'username': 'root', 'password': 654321}]
- dict 嵌套list
group1:
- admin
- 123456
group2:
- root
- 654321
输出结果:{'group1': ['admin', 123456], 'group2': ['root', 654321]}
Python读取YML文件
import yaml
with open('Cps.yaml', 'r', encoding='utf-8') as f:
file_content = f.read()
content = yaml.load(file_content, yaml.FullLoader)
print(content)