Многомерный словарь в configparser

Можно ли хранить многомерный словарь (глубина 3) с помощью Python configparser с использованием отступов? Обходной путь состоит в том, чтобы разделить ключевые значения, но хотелось знать, есть ли чистый способ импорта непосредственно в словарь.

НЕ РАБОТАЕТ - ИСПОЛЬЗОВАНИЕ УКАЗАНИЯ ПОДПАРАМЕТРОВ В КОНФИГПАРСЕРЕ


    [OPTIONS]
        [SUB-OPTION]
        option1 = value1
        option2 = value2
        option3 = value3

РАБОТА - РАЗДЕЛЕНИЕ ИСПОЛЬЗУЕТСЯ НА ЗНАЧЕНИЯ ПОДПАРАМЕТРОВ


    [OPTIONS]
    SUB-OPTION  = 'option1, value1',    
                  'option2, value2',
                  'option3, value3'

СЛОВАРНЫЕ ЗНАЧЕНИЯ


    dict['OPTIONS']['SUB-OPTION'] = {
        option1 : value1,
        option2 : value2,
        option3 : value3,
    }


person NobleVision    schedule 27.04.2016    source источник


Ответы (2)


ASAIK, есть вложенный файл конфигурации в этом формате.

Я предлагаю конфигурационный файл типа json:

{
 "OPTIONS": {
   "SUB-OPTIONS": {
     "option1" : value1,
     "option2" : value2,
     "option3" : value3,
   }
 }
}

Затем в коде используйте:

from ast import literal_eval
with open("filename","r") as f:
 config = literal_eval(f.read())

Редактировать

В качестве альтернативы вы можете использовать YAML (с PyYAML) в качестве отличного файла конфигурации.

Следующий файл конфигурации:

option1:
    suboption1:
        value1: hello
        value2: world
    suboption2:
        value1: foo
        value2: bar

Может быть проанализирован с помощью:

import yaml
with open(filepath, 'r') as f:
    conf = yaml.safe_load(f)

Затем вы можете получить доступ к данным, как в dict:

conf['option1']['suboption1']['value1']
>> 'hello'
person Liran Funaro    schedule 27.04.2016
comment
Спасибо, пытался сделать файл конфигурации более удобочитаемым со встроенным анализатором конфигурации Python, но похоже, что JSON - единственное встроенное решение. YAML может быть другим вариантом. - person NobleVision; 22.06.2016
comment
Тогда я предполагаю, что проще всего использовать следующий формат: [OPTION, SUBOPTION] option1 = value1 option2 = value2 option3 = value3 Затем проанализировать его с помощью configparse и разделить каждое имя категории в соответствии с запятыми и построить словарь как вы упомянули. - person Liran Funaro; 23.06.2016
comment
YAML также может быть рассержен взглядом - person Liran Funaro; 27.04.2017
comment
Я нашел пакет Python ConfigObj, в котором есть вложенные разделы, но в последний раз он был сохранен в 2014 году. - person NobleVision; 29.12.2017

config.ini

OPTIONS  = {"option1": "value1", "option2": "value2", "option3": "value3"}

Код:

import json
options = json.loads(conf['OPTIONS'])
person Daniel Braun    schedule 03.09.2018