1.安装
- 需要安装得模块名为pyyaml,直接pip install pyyaml
- 导入,直接import yaml
2.yaml文件的格式
- 文件格式输出可以是列表,可以是字典,可以嵌套。层级关系用空格区分,切记,不支持tab缩进
a)键值对形式
user: admin
pwd: 123
job:
- teacher
- nurese
输出为:{'user': 'admin', 'pwd': 123, 'job': ['teacher', 'nurese']}
b)序列list
- admin1: 123456
- admin2: 111111
- admin3: 222222
输出:[{'admin1': 123456},
{'admin2': 111111},
{'admin3': 222222}]
c)纯量str
n1: 52.10
输出:{'n1': 52.1}
n2: true
n3: false #不区分大小写
输出:{'n2': True, 'n3': False}
None用~表示
n4: ~
输出:{'n4': None}
d)强制转换,使用!!
n7: !!str true
输出:{'n7': 'true'}
e)多个文件:一个yaml文件里存在多个文件,用---表示,只能一起读取,不能分开读取
---
user: admin
pwd: ~
job:
- teacher
- nurese
---
school: erxiao
location: sky
3.yaml文件的读取xx.yaml
'''多个文件'''
import yaml
#由于官方提示load方法存在安全漏洞,所以读取文件时会报错。加上warning忽略,就不会显示警告
yaml.warnings({'YAMLLoadWarning':False})
f=open('source.yaml','r',encoding='utf-8') #打开yaml文件
cfg=f.read()
d=yaml.load_all(cfg) #将数据转换成python字典行驶输出,存在多个文件时,用load_all,单个的时候load就可以
for data in d:
print(data)
f.close()
输出:
{'user': 'admin', 'pwd': None, 'job': ['teacher', 'nurese']}
{'school': 'erxiao', 'location': 'sky'}
'''单个文件'''
yaml.warnings({'YAMLLoadWarning':False})
f=open('source.yaml','r',encoding='utf-8')
cfg=f.read()
print(cfg)
d=yaml.load(cfg)
print(d)
f.close()
输出:
user: admin
pwd: ~
job:
- teacher
- nurese
{'user': 'admin', 'pwd': None, 'job': ['teacher', 'nurese']}
4.yaml文件的写入
import yaml
import os
def yaml_doc(yampath):
data={'school':'erxiao',
'studens':['lili','jj']}
file=open(yampath,'w',encoding='utf-8')
yaml.dump(data,file)
file.close()
currentpath=os.path.abspath('.') #获取当前路径
yamlpath=os.path.join(currentpath,'generate.yaml') #创建yaml文件
yaml_doc(yamlpath)
输出:
generate.yaml文件
school: erxiao
studens:
- lili
- jj
```※注意:如果是在已存在数据的yaml文件中执行此脚本,那么数据会被覆盖※```
5.yaml文件的持续写入
import yaml
inputdata={
"url":'https://www.baidu.com/',
"driver":['ie','chrome','firfox']
}
with open('source.yaml','a',encoding='utf-8') as f: #'a'代表持续写入,‘w’代表覆盖写入
yaml.dump(inputdata,f)
print('well done')
6.Template修改yaml中的变量
source.yaml
- test:
name: login case1
request:
url: http://49.235.x.x:7000/api/v1/login/
method: POST
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
username: $user
password: $psw
validate:
- eq: [$.msg, login success!]
- eq: [$.code, 0]
Read_yaml.py
import yaml
from string import Template
class YamlUtil:
def __init__(self, yaml_file):
self.yaml_file = yaml_file
def read_yaml(self):
with open(self.yaml_file, 'r', encoding='utf-8') as f:
# 正常格式控制台输出
# value = yaml.load(f, Loader=yaml.FullLoader)
# 原格式输出
value = f.read()
temp = Template(value)
# substitute替代者
# safe_substitute可以让不想匹配的变量当正常的字符串使用
res = temp.safe_substitute({'user': 'lily', 'password': '123456'})
yaml_data = yaml.safe_load(res)
print(res)
print(yaml_data)
if __name__ == '__main__':
YamlUtil('source.yaml').read_yaml()
※问题:1.含有多个文件的yaml文件,读取出来如何选择?
2.持续写入能否将新写入的文件变成新的文件结构?※
PS:觉得这篇文章有用的朋友,多多点赞打赏哦~!
网友评论