8
votes

Is it possible to store a multi-dimensional dictionary (3 deep) using the Python 'configparser' using indentions? The work-around is to split the key values, but wanted to know if there was a clean way to import directly into a dictionary.

DOES NOT WORK - USING SUB-OPTION INDENTION IN CONFIGPARSER


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

WORKS - SPLITING USED ON SUB-OPTION VALUES


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

DICTIONARY VALUES


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

2

2 Answers

4
votes

ASAIK, there is a nested configuration file in that format.

I suggest a json like config file:

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

Then in the code use:

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

Edit

Alternatively, you can use YAML (with PyYAML) as a great configuration file.

The following configuration file:

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

Can be parsed using:

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

Then you can access the data as you would in a dict:

conf['option1']['suboption1']['value1']
>> 'hello'
2
votes

config.ini

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

Code:

import json
options = json.loads(conf['OPTIONS'])