2016-01-23 5 views
1

В настоящее время я использую ConfigParser сделать словарь объектов Person класса из INI-файла, который выглядит следующим образом (в реальном словаре, есть много больше людей):Могу ли я использовать configparser для создания словаря словарей?

[Pers1] 
name = Alice 
sex = female 

[Pers2] 
name = Bob 
sex = male 

Эти разобранный словарь называется people, поэтому people['Pers1'].name является атрибутом namePers1, "Alice". people['Pers2'].sex - "male" и т. Д.

Теперь, предположим, я хочу, чтобы Алиса имела еще один атрибут, называемый tags. tags будет словарем, со структурой, как это:

people['Pers1'].tags = { 
'Employed': 
    {COMPANY: 'Macrosoft', 
    EMPLOYEE_SINCE: '1/5/2005' 
    }, 
'LicensedPilot': 
    {LICENSE_ISSUED: '6/7/2007', 
    EXPIRATION_DATE: '12/11/2017' 
    } 
} 

tags не является словарем, который может быть пустым или содержать больше словарей (хотя только вложенные один-глубоко, поэтому нет словарей-из-словарей-из -dictionaries ... в tags).

Есть ли способ настроить configparser для чтения .ini и создания этих словарей?

ответ

1

INI сам по себе является плоским форматом. Если вы хотите хранить вложенные данные в нем, вам нужно будет это обработать.

Например, квалифицированные имена свойств:

[Pers1] 
name = Alice 
sex = female 
tags.COMPANY = Macrosoft 
tags.EMPLOYEE_SINCE = 1/5/2005 

Обратите внимание, они по-прежнему будут возвращены как «плоский» options списка, например первый тег будет иметь ключ "tags.COMPANY". Вам нужно будет разделить имена опций на . и обработать результаты самостоятельно.

Другим подходом было бы использование формата, предназначенного для хранения вложенных данных, и перевода его непосредственно в списки и словари, такие как YAML.

Смежные вопросы