python项目中的配置文件

灵感来自与Django源码
import importlib
import os


class Settings:
    def __new__(cls, settings_module=None):
        if not hasattr(cls, '_has'):
            obj = object()
            settings_module = settings_module if settings_module else os.environ.get('SETTINGS_MODULE')
            if not settings_module:
                raise ValueError('must define "SETTINGS_MODULE"')
            module = importlib.import_module(settings_module)
            for setting in dir(module):
                if setting.isupper():
                    setting_value = getattr(module, setting)
                    setattr(cls, setting, setting_value)
            cls._has = True
        return cls


conf = Settings()
灵感来自与bottle源码
# conf.ini
[default]
db_host = 127.0.0.1
db_port = 69

[other]
name = "helloworld"
log_path = "/root/deploy/api.log"
import os
from configparser import ConfigParser


class ConfigDict(dict):
    """
    config.py
    """
    def load_config(self, filename):
        ''' Load values from an *.ini style config file.

            If the config file contains sections, their names are used as
            namespaces for the values within. The two special sections
            ``DEFAULT`` and ``bottle`` refer to the root namespace (no prefix).
        '''
        conf = ConfigParser()
        conf.read(filename)
        for section in conf.sections():
            for key, value in conf.items(section):
                if section not in ('default', 'bottle'):
                    key = section + '.' + key
                #
                self[key] = value
        return self


config = ConfigDict()


if __name__ == '__main__':
    config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "conf.ini")
    conf = config.load_config(config_file)
    print(conf.get("db_host"))
    print(conf["db_port"])
    print(conf.get("other.name"))
    print(conf["other.log_path"])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值