zoukankan      html  css  js  c++  java
  • Python接口自动化之yaml配置文件

    在自动化过程中,需要使用配置文件储存数据,比如数据库信息、账号信息、域名等。

     

    其中,yaml文件是一种配置文件类型,相比较iniconf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据。

     

    以下主要介绍yaml语法、yaml存储数据,封装类读写yaml配置文件。

    yaml介绍及使用

    01 yaml简介

    YAML 语言( /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

     

    YAML 是一种非常灵活的格式,几乎是 JSON 的超集。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。

    02 yaml语法规则

    基本语法规则:

    • 大小写敏感;

    • 使用缩进表示层级关系;

    • 缩进时不允许使用Tab键,只允许使用空格;

    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;

    • # 表示注释,从这个字符一直到行尾,都会被解析器忽略;

    03 yaml数据结构

    • 对象:键值对的集合,又称为映射(mapping)、哈希(hashes) 、字典(dictionary);

    • 数组:一组按次序排列的值,又称为序列(sequence) 、列表(list);

    • 纯量(scalars):单个的、不可再分的值;

    ▌对象

    Map(属性和值)(键值对)的形式:

    key:(空格)value :表示一对键值对,空格不可省略。

    person:
        name: vivi
        age: 18

    一行写法:

    person:{name: vivi,age: 18}

    相当于JSON格式:

    {"name":"vivi","age":18}
    

      

    数组

    一组连词线开头的行,构成一个数组。数组前加有 “-” 符号,符号与值之间需用空格分隔。

    color:
       - red
       - blue
       - green

    一行写法:

    color: [red,blue,green]

    相当于JSON:

    ["red","blue","green"]

     

    纯量

    单个的、不可再分的值。(如:字符串、bool值、整数、浮点数、时间、日期、null等)

    n1: 8
    n2: 8.8
    n3: true
    n4: false
    n5: 'vivi'
    

    yaml配置文件的使用

    01  yaml配置文件准备

    在项目下新建一个目录config,在目录下新建一个文件config.yaml。

    图片 

    在config.yaml配置文件中写入数据库配置。

    mysql:
      host: "127.0.0.1"
      port: 3306
      user: "vivi"
      password: "123456"
      db: "ITester"
      charset: "utf8"

    02  yaml配置文件格式校验

    刚了解yaml的同学,可能对yaml格式掌握不熟练,出现格式错误,这里推荐一个在线网站,用于校验我们写的yaml文件格式是否正确。

    图片

    在线地址:

    https://www.bejson.com/validators/yaml_editor/

     

    yaml配置文件读写

    python中读取yaml文件前需要安装pyyaml和导入yaml模块。

    01  安装pyYaml

    在python中读取yaml文件,需要用到第三方模块PyYaml。

    安装命令:

    pip install pyYaml

    02  yaml模块源码解析

    从yaml模块中提取出loaddump函数。

    def load(stream, Loader=None):
        """
        Parse the first YAML document in a stream
        and produce the corresponding Python object.
        """
        if Loader is None:
            load_warning('load')
            Loader = FullLoader
        loader = Loader(stream)
        try:
            return loader.get_single_data()
        finally:
            loader.dispose()
            
    def dump(data, stream=None, Dumper=Dumper, **kwds):
        """
        Serialize a Python object into a YAML stream.
        If stream is None, return the produced string instead.
        """
        return dump_all([data], stream, Dumper=Dumper, **kwds)
    

      

    load:

    将yaml流转化为python字典;

     

    dump:

    将python对象转化为yaml流;

     

    03  读写yaml配置文件

    将读写yaml配置文件的类进行封装。

    在common目录下新建一个文件,config_handler.py用于读写yaml。

    图片

    config_handler.py

    import yaml
    
    class YamlHandler:
        def __init__(self,file):
            self.file = file
    
        def read_yaml(self,encoding='utf-8'):
            """读取yaml数据"""
            with open(self.file, encoding=encoding) as f:
                return yaml.load(f.read(), Loader=yaml.FullLoader)
                
        def write_yaml(self, data, encoding='utf-8'):
            """向yaml文件写入数据"""
            with open(self.file, encoding=encoding, mode='w') as f:
                return yaml.dump(data, stream=f, allow_unicode=True)
    
    if __name__ == '__main__':
        data = {
            "user":{
                "username": "vivi",
                "password": "123456"
            }
        }
        # 读取config.yaml配置文件数据
        read_data = YamlHandler('../config/config.yaml').read_yaml()
        # 将data数据写入config1.yaml配置文件
        write_data = YamlHandler('../config/config1.yaml').write_yaml(data)
        print(read_data)
    

     

    运行结果为:

    {'mysql': {'host': '127.0.0.1', 'port': 3306, 'user': 'vivi', 'password': '123456', 'db': 'ITester', 'charset': 'utf8'}}
    

      

    写入到config1.yaml的数据。

    config1.yaml

    user:
      password: '123456'
      username: vivi
    

    总结:本文主要介绍yaml语法、yaml储存数据,封装类读取yaml配置文件。

     

     

  • 相关阅读:
    高精度计算
    高精度除以低精度
    P1258 小车问题
    POJ 2352 stars (树状数组入门经典!!!)
    HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)
    HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
    POJ 1703 Find them, Catch them(确定元素归属集合的并查集)
    HDU Virtual Friends(超级经典的带权并查集)
    HDU 3047 Zjnu Stadium(带权并查集,难想到)
    HDU 3038 How Many Answers Are Wrong(带权并查集,真的很难想到是个并查集!!!)
  • 原文地址:https://www.cnblogs.com/chenyablog/p/15171203.html
Copyright © 2011-2022 走看看