Python: не удается прочитать свойства из файла свойств
Я пытаюсь прочитать конфигурации из файла свойств и сохранить эти свойства в переменной, чтобы к ней можно было получить доступ из любого другого класса.
Я могу прочитать конфигурацию из файла конфигурации и распечатать то же самое, но получаю исключение, когда к этим переменным обращаются из какого-то другого класса.
мой конфигурационный файл
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 ответ
Анализируя ваш вопрос, вы пытаетесь создать файл среды, если это так, потому что вы используете класс для чтения файла, вы должны выполнить эту операцию в его конструкторе (не забудьте сделать ссылку самостоятельно) и создать экземпляр, чтобы иметь возможность доступа его значения, вы можете прекрасно использовать функцию для выполнения этого чтения, помня, что для доступа к результату можно рассматривать как словарь
имя файла конфигурации = (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"
}
}