python使用YAML配置文件
YAML文件说明
- 通俗易懂
- 对齐和空格要注意,有点像Python的语法
语法说明
- 大小写敏感
- 缩进代表层级关系(类似python)
- 缩进空格数量不重要,但同一等级数据左对齐
- 缩进使用空格,不能使用Tab
- 冒号后有一个空格,必不可少
- # 开头注释
- - 表示列表(数组)
python读取YAML
import yaml
def read_yaml(yaml_file):
with open(yaml_file, 'r') as loadfile:
return yaml.load(loadfile, Loader=yaml.FullLoader)
config = read_yaml(yaml_file)
print(config)
YAML文件结构示例及对应python数据结构
1. 简单一维
name: Tom
age: 12
gender: male
对应python数据
{'name': 'Tom', 'age': 12, 'gender': 'male'}
2. 二维
student:
name: Tom
age: 12
gender: male
Teacher:
name: Jeff
age: 43
gender: male
对应python数据
{'student': {'name': 'Tom', 'age': 12, 'gender': 'male'}, 'Teacher': {'name': 'Jeff', 'age': 43, 'gender': 'male'}}
3. 复合结构1(列表和对象)
subjects:
- Chinese
- math
- English
- physics
- chemistry
Teacher:
Chinese: Miss Wang
math: Doctor Lee
English: Mr Smith
physics: Mr Kang
chemistry: MS Yan
对应python数据
{'subjects': ['Chinese', 'math', 'English', 'physics', 'chemistry'], 'Teacher': {'Chinese': 'Miss Wang', 'math': 'Doctor Lee', 'English': 'Mr Smith', 'physics': 'Mr Kang', 'chemistry': 'MS Yan'}}
4. 复合结构2(列表和对象)
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
对应python数据
{'companies': [{'id': 1, 'name': 'company1', 'price': '200W'}, {'id': 2, 'name': 'company2', 'price': '500W'}]}
5. 引用(& *)
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
相当于
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
YAML基本变量
纯量(最基本的,不可再分的值),包含
1. 字符串
2. 布尔值
3. 整数
4. 浮点数
5. Null
6. 时间
7. 日期
示例:
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
对应python数据结构
{'boolean': [True, False],
'float': [3.14, 685230.15],
'int': [123, 685230],
None: {'nodeName': 'node', 'parent': None},
'string': ['哈哈', 'Hello world', 'newline newline2'],
'date': [datetime.date(2018, 2, 17)],
'datetime': [datetime.datetime(2018, 2, 17, 15, 2, 31, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))]}
参考:
菜鸟-YAML入门