yet another markup language
yaml是设计专门用来写配置文件的标记语言。
pip install pyyaml
yaml只有三种数据格式:常量、对象和数组
键值对的集合,包括 映射 哈希和字典,使用冒号加个空格表示, 格式为 key:value
key:
child_key1:value1
child_key2:value2
yaml可以使用流式(flow)语法表示对象,即:
key:{child_key1:value1,child_key2:value2}
复杂对象格式:
可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value:
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
一组按次序排列的值,包括序列和列表,使用短横线加个空格表示
name:
- tom
- abby
-
- tom
- abby
–>可以理解[[tom,abby]]
属性和数组相互构成的例子:
companies:
-
id: 1
name: company1
location: beijing
-
id: 2
name: company2
location: shanghai
提供了多种包括:整数、浮点数、字符串、布尔型、NULL、日期和时间的常量结构;
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连接,最后使用+代表时区
使用双感叹号,表示强制转换
var1: !!str 11 #int转str
var2: !!str true #bool转str
- user: admin1
psw: '123456'
- user: admin2
psw: '111111'
- user: admin3
psw: '222222'
用python读取出来的结果:
[{'user': 'admin1', 'psw': '123456'},
{'user': 'admin2', 'psw': '111111'},
{'user': 'admin3', 'psw': '222222'}]
nub1:
- admin1
- '123456'
nb2:
- admin2
- '111111'
nb3:
- admin3
- '222222'
用python读取出来的结果:
{'nub1': ['admin1', '123456'],
'nb2': ['admin2', '111111'],
'nb3': ['admin3', '222222']}
解决方法: 使用python3,先用open方法读取文件数据,再通过load方法转换成字典
def get_inputData(filename):
# 获取yaml文件路径
yamlPath = os.path.join(mockFileDir, filename)
# open方法打开yaml输入文件,直接读出来
f = open(yamlPath, 'r', encoding='utf-8')
cfg = f.read() # type(cfg)->str
# 用load方法转字典
dict_data = yaml.load(cfg)
return dict_data
解决方法:使用python3,先用open方法追加写入文件,再通过dump装载数据
yamlPath = os.path.join(mockFileDir, "output.yaml")
# open方法写入yaml输出文件,a表示追加写入数据,w表示覆盖写入
fa = open(yamlPath, 'a', encoding='utf-8')
data = {"kv1", {'para1': 'value1', 'para2': 'value2', 'para3': 'value3'}}
yaml.dump(data, fa)
# 验证写入的数据是否正确
f = open(yamlPath, 'r', encoding='utf-8')
content=f.read()
dict_data = yaml.load(content)
print(dict_data.get('kv1'))