9-Yaml格式文件

Yaml格式简介

 Yaml是专门用来写配置文件的语言,非常简洁强大,比JSON格式方便。可用来做自动化测试框架的配置文件或用例文件
 安装yaml:pip install PyYaml

Yaml格式语法

基本类型

  • 字符串
  • 整形
  • 浮点型
  • 布尔型
  • null
  • 时间
  • 日期

基本规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab,只允许使用空格
  • 缩进空格数目不重要,只要相同层级的元素对齐即可
  • #表示注释当前行
  • 冒号后需要加空格
  • 外层的格式要保持一致

1、Yaml转字典

#conf.yaml文件
username: user01
password: 123456

#py文件,读取yaml文件并转换成字典
import yaml
def get_yaml_data(filedir):
    with open(filedir,'r',encoding='UTF-8') as file1:
        res = yaml.load(file1,Loader=yaml.FullLoader)
        print(res)

if __name__ == '__main__':
    get_yaml_data('../configs/conf.yaml')

#执行结果:
{
    
    'username': 'user01', 'password': 123456}

2、Yaml转列表

#conf.yaml文件
- 10
-
  - 101
  - 102

#执行结果:
[10, [101, 102]]

3、Yaml 列表套字典

#conf.yaml文件
- 10
-
  username: user01  
  password: 123456

#执行结果:
[10, {
    
    'username': 'user01', 'password': 123456}]

4、Yaml 字典套列表

#conf.yaml文件
username: user01  
password: 123456
info: 
  - 101
  - 102

#执行结果:
{
    
    'username': 'user01', 'password': 123456, 'info': [101, 102]}

5、特殊符号的处理

  • 字符中间包含\n \t时,需要加双引号才能保持原样,否则变为\n,\t
  • 需要保留单引号时,外层用双引号引起

6、变量的定义、引用

#conf.yaml文件
name: &user Marry
label1: *user
label2: *user

#执行结果:
{
    
    'name': 'Marry', 'label1': 'Marry', 'label2': 'Marry'}

7、多个yaml写在一起

使用—作为分隔符

#conf.yaml文件
username: marry
password: 123456
---
- 101
- 102
- 103

import yaml
def get_yamls_data(filedir):
    with open(filedir,'r',encoding='UTF-8') as file1:
        resList = []
        res = yaml.load_all(file1,Loader=yaml.FullLoader)  #读多个yaml使用yaml.load_all
        for one in res:
            resList.append(one)
        print(resList)

if __name__ == '__main__':
    get_yamls_data('../configs/conf.yaml')

8、继承其他yaml文件

#a.yaml
username: marry
password: 123456
info: !include b.yaml  # 继承b.yaml文件数据

#b.yaml
- 101
- 102
- 103
#继承yaml .py文件
import yaml
import os.path
class Loader(yaml.Loader):
    def __init__(self,stream):
        self.root = os.path.split(stream.name)[0]
        super(Loader,self).__init__(stream)
    def include(self,node):
        filename = os.path.join(self.root,self.construct_scalar(node))
        with open(filename,'r') as f:
            return yaml.load(f,Loader)
Loader.add_constructor('!include',Loader.include)

if __name__ == '__main__':
    with open('../configs/a.yaml') as f:
        data = yaml.load(f,Loader)
        print(data)

#执行结果:
{
    
    'username': 'marry', 'password': 123456, 'info': [101, 102, 103]}

猜你喜欢

转载自blog.csdn.net/weixin_45128456/article/details/113247344