• 五、配置文件yaml


    一、什么是配置文件:.ini   .conf    .cfg
    在一个项目当中,对项目进行配置(设置)的一些数据在项目运行过程中,一般不会变化。对于不同的项目和环节,可能需要变化
     
    二、为什么要做配置文件
    将所有的代码和配置都变成模块化可配置化,这样就提高了代码的重用性,不用每次都去修改代码内部,这就是我们逐步要做的事情
    场景举例:
    1)多处地方需要用同一个参数,这个时候最好是配置化,这样改动一处就可以
    2)如果是经常变化的变量,我们也可以做这个配置--与参数化要区分开来
     
    三、yaml文件格式
    log:
        name: 'python29'
        file: 'python20log.txt'
        logger_level: 'DEBUG'
        file_level: 'DEBUG'
        stream_level: 'DEBUG'
    mysql:
        port: 3306
        db_name: 'demo'
    excel:
        file: 'cases.xlsx'

    1) yaml文件规则

    * 区分大小写;

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

    * 使用空格键缩进,而非Tab键缩进

    * 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;

    * 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;

    * 注释标识为#

    * 冒号后空一行,字符串可以加引号,可以不加引号

    * 新建file文件,命名xx.yaml或者xx.yml

    2) yaml文件数据结构

    * 字典:键值对的集合
                键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
    log:
        name: 'zjx'
        file: 'zjxlog.txt'
        logger_level: 'DEBUG'
        file_level: 'DEBUG'
        stream_level: 'DEBUG'
    * 列表:一组按序排列的值
                数组前加有 “-” 符号,符号与值之间需用空格分隔
    teachers:
      - nini
      - huahua
      - panpan

    * 字符串:可以加引号,也可以不加

    log:
        name: zjx
        file: 'zjxlog.txt'

    * 数字:加引号就是字符串,不加就是int

    demo:
      age1: 16
      age2: "18"

    四、yaml文件使用

    1)安装yaml模块
    cmd命令:pip install yaml
     
    2)新建.yaml文件
    右键-->new-->file,输入name以.yml或.yaml结尾即可
     

    3)读取yaml文件数据

    取yaml文件,返回的值是个字典

    import yaml
    
    with open('config.yaml','r',encoding='utf=8') as f:
        conf = yaml.load(f,Loader=yaml.SafeLoader)
        print(conf)

     

    4)文件写入:yaml.dump(一般情况不使用)

    # 写入yaml
    with open('another.yaml','w',encoding='utf-8') as f:
        yaml.dump({'log':'logdemo'},f)

    五、封装  yaml_handler

    import yaml
    
    # 封装读取和写入yaml文件
    def read_yaml(file):
        '''读取yaml文件'''
        with open(file, 'r', encoding='utf=8') as f:
            conf = yaml.load(f, Loader=yaml.SafeLoader)
        return conf
    
    def write_yaml(file,data):
        '''写入yaml文件'''
        with open(file, 'w', encoding='utf-8') as f:
            yaml.dump(data, f)

    六、读取yaml文件到log封装

    import logging
    import yaml
    
    # 封装读取和写入yaml文件
    def read_yaml(file):
        '''读取yaml文件'''
        with open(file, 'r', encoding='utf=8') as f:
            conf = yaml.load(f, Loader=yaml.SafeLoader)
        return conf
    
    def write_yaml(file,data):
        '''写入yaml文件'''
        with open(file, 'w', encoding='utf-8') as f:
            yaml.dump(data, f)
    
    # 获取所有配置项
    config = read_yaml('config.yaml')
    log_config = config['log']
    
    # 封装日志
    def get_logger(
            name = log_config['name'],
            file = log_config['file'],
            logger_level = log_config['logger_level'],
            file_level = log_config['file_level'],
            stream_level = log_config['stream_level']
    ):
        '''获取收集器'''
        logger = logging.getLogger(name)
        # 设置收集器级别
        logger.setLevel(logger_level)
    
        # 设置输入管理器
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(stream_level)
        logger.addHandler(stream_handler)
    
        # 设置格式
        fmt_value = '%(asctime)s--%(filename)s--%(lineno)d--%(levelname)s--%(message)s'
        fmt = logging.Formatter(fmt_value)
        stream_handler.setFormatter(fmt)
    
        if file:
            file_handler = logging.FileHandler(file, encoding='utf-8')
            file_handler.setLevel(file_level)
            logger.addHandler(file_handler)
            file_handler.setFormatter(fmt)
    
        return logger
    
    # 运行
    if __name__ == '__main__':
        logger = get_logger(file='log.txt')
        logger.info('hello')
        logger.warning('警告')
  • 相关阅读:
    hdu6514 // 二维差分 二维前缀和 基本容斥 压维
    【模板】欧拉函数 & 欧拉筛
    并查集模板 hdu1703
    大数 gcd
    hdu1087 dp
    洛谷p1306 斐波那契公约数
    hdu6814 Tetrahedron 线性求逆元 + 快速幂求逆元
    hdu6867 Tree // DFS
    hdu6869 Slime and Stones // 威佐夫博弈·改
    Python实现EXCEL表格的排序功能
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13680848.html
Copyright © 2020-2023  润新知