python 读取 yaml配置并转换class类型

 首先为什么我们要转换class呢?下边示例一下你就明白了

例:

a = {'a': 1, 'b': {'r': 2}, 'c': {'z': 4, 'w': 3}, 'd': 4, 'e': 5}
我们要获取c字典里边的z的内容:
a['c']['z']
或
a.get('c').get('z')

如果我们转换class,这样获取
a.c.z
这样我们就拿到想要的结果
是不是很便利呢

 以下是代码:

# -*- coding:utf-8 -*-
# @Time: 2022/8/25 15:34 
# @File: config.py
# @Software: PyCharm

import yaml, os
from icecream import ic

# cfg.yaml 配置文件内容
'''
database:
  ip: 192.168.2.1
  port: 8080
redis:
  ip: 192.168.2.2
  port: 6379
host:
  group:
    name: qqq
    passwd: 333
'''


class DictToClass(object):
    '''
    ;;将字典准换为 class 类型
    '''
    @classmethod
    def _to_class(cls, _obj):
        _obj_ = type('new', (object,), _obj)
        [setattr(_obj_, key, cls._to_class(value)) if isinstance(value, dict) else setattr(_obj_, key, value) for
         key, value in _obj.items()]
        return _obj_


class ReadConfigFiles(object):
    def __init__(self):
        '''
        ;;获取当前工作路径
        '''
        self.works_path = os.path.dirname(os.path.realpath(__file__))

    @classmethod
    def open_file(cls):
        '''
        ;;读取当前工作目录下cfg.yaml文件内容,并返回字典类型
        :return:
        '''
        return yaml.load(
            open(os.path.join(cls().works_path, r'cfg.yaml'), 'r', encoding='utf-8').read(), Loader=yaml.FullLoader
        )

    @classmethod
    def cfg(cls, item=None):
        '''
        ;;调用该方法获取需要的配置,item如果为None,返回则是全部配置
        :param item:
        :return:
        '''
        return DictToClass._to_class(cls.open_file().get(item) if item else cls.open_file())


if __name__ == '__main__':
    '''
    ;;调用ReadConfigFiles.cfg('传递参数 or null')
    '''
    cfg = ReadConfigFiles.cfg()
    # 测试输出
    ic(cfg.host.group)
python.exe config.py

ic| cfg: <__main__.DictToClass object at 0x0000024CEA694A58>

Process finished with exit code 0

YAML是一种用于序列化数据的格式,它使用简单的标记和缩进来表示数据的结构。在Python中,我们可以使用PyYAML库来解析和生成YAML文件。 引用中的示例展示了一个Python字典数据,它表示了一些动物和它们的类型。在读取这个字典数据后,我们可以通过访问键来获取相应的值。 引用中的示例展示了通过解析YAML文件后获得的数据。在这个示例中,我们可以看到一个包含了不同类型数据的字典,包括字符串、整数和换行符。 通过PyYAML库,我们可以使用`yaml.load()`方法来解析YAML文件,并将其转换Python对象。这样我们就可以轻松地访问其中的数据。 另外,引用中的示例展示了如何使用`yaml.dump()`方法将Python对象生成为YAML文件。在这个示例中,我们可以看到一个包含了学校名称和学生列表的字典对象被生成为了一个YAML文件。 总结来说,YAML是一种用于序列化数据的格式,在Python中我们可以使用PyYAML库来解析和生成YAML文件。通过解析YAML文件,我们可以将其转换Python对象,并对其中的数据进行访问和操作。而通过使用`yaml.dump()`方法,我们可以将Python对象生成为YAML文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python 处理yaml](https://blog.csdn.net/test_leader/article/details/122320305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值