Python:无法从属性文件读取属性

时间:2019-06-24 15:38:54

标签: python django python-3.x configparser python-config

我正在尝试从属性文件中读取配置,并将这些属性存储在变量中,以便可以从任何其他类进行访问。

我能够从配置文件中读取配置并进行打印,但是当从其他类访问这些变量时,我遇到了异常。

我的配置文件

Config.cfg.txt
    [Ysl_Leader]
    YSL_LEADER=192

通用类,我将在其中存储属性。     ConfigReader.py

    import configparser

        class DockerDetails:
            config = configparser.RawConfigParser()
            _SECTION = 'Ysl_Leader'
            config.read('Config.cfg.txt')
            YSL_Leader = config.get('Ysl_Leader', 'YSL_LEADER')
            print(YSL_Leader)

我正在尝试获取“ YSL_Leader”值的另一个类

def logger(request):
    print(ConfigReader.DockerDetails.YSL_Leader)

例外:

  File "C:\Users\pvivek\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 780, in get
    d = self._unify_values(section, vars)
  File "C:\Users\pvivek\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 1146, in _unify_values
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'Ysl_Leader'

仅供参考:当我单独运行ConfigReader.py时,我没有任何异常

1 个答案:

答案 0 :(得分:0)

分析您尝试创建环境文件的问题,如果是这种情况,因为您正在使用类来读取该文件,则必须在其构造函数中执行此操作(记住使引用成为自身)并实例化为能够访问其值,您可以完美地使用一个函数来执行此读取操作,记住访问结果可以视为字典

配置文件名=(config.ini)

[DEFAULT]
ANY = ANY

[Ysl_Leader]
YSL_LEADER = 192

[OTHER]
VALUE = value_config
# using classes
class Cenv(object):
    """
    [use the constructor to start reading the file]
    """
    def __init__(self):
        self.config = configparser.ConfigParser()
        self.config.read('config.ini')

# using functions
def Fenv():
    config = configparser.ConfigParser()
    config.read('config.ini')
    return config

def main():
    # to be able to access it is necessary to instantiate the class
    instance = Cenv()
    cfg = instance.config
    # access the elements using the key (like dictionaries) 
    print(cfg['Ysl_Leader']['YSL_LEADER'])
    print(cfg['OTHER']['VALUE'])

    # call function and assign returned values
    cfg = Fenv()
    print(cfg['Ysl_Leader']['YSL_LEADER'])
    print(cfg['OTHER']['VALUE'])
    # in the case of django assign values ​​in module settings

if __name__ == '__main__':
    main()

您可以按以下方式解释结果(字典)

{
    "Ysl_Leader": {
        "YSL_LEADER": "192"
    },
    "OTHER": {
        "VALUE": "value_config"
    }
}