Столкнулся с весьма забавной проблемой при работе с конфиг файлами, используя стандартную библиотеку ConfigParser. Дело в том, что до версии 2.7 эта библиотека не соблюдает порядок в котором расположены секции в конфиг файле, потому что хранит их в обыкновенном dict
объекте. В версии же 2.7 библиотека использует добавленный в collections класс OrderedDict
и никаких проблем с порядком нет.
Возможно, в целом это не должно являтся какой-то проблемой, но создавая интерфейс для редактирования значений в конфиг файле, хотелось давать пользователю всегда одинаковый результат, а не перемешивать секции и значения в секции от правки к правке.
Решение весьма простое, использовать dict_type
при инициализации парсера, например так:
from ConfigParser import SafeConfigParser
from django.utils.datastructures import SortedDict
config = SafeConfigParser(dict_type=SortedDict)
Примечание: Я использовал здесь Django'вский SortedDict
, но вы можете спокойно использовать свой объект, который соблюдает порядок значений при работе со словарем данных.
Единственный недостаток метода, что он будет работать только для Python 2.6, потому что поддержка dict_type
появилась именно в этой версии. Для владельцев же более ранних версий возможно полезным будет узнать о неплохой альтернативе ConfigObj, в которой нет проблем с порядком данных и еще эта библиотека понимает комментарии в конфиг файлах :)