Сохраняйте выходные файлы ConfigParser отсортированными - PullRequest
7 голосов
/ 16 июля 2009

Я заметил, что с моим контролем версий содержимое выходных файлов, созданных с помощью ConfigParser, никогда не будет в том же порядке. Иногда разделы меняют место или параметры внутри разделов даже без каких-либо изменений значений.

Есть ли способ сохранить сортировку в файле конфигурации, чтобы мне не приходилось вносить тривиальные изменения при каждом запуске приложения?

Ответы [ 4 ]

9 голосов
/ 16 июля 2009

Похоже, это было исправлено в Python 3.1 и 2.7 с введением упорядоченных словарей:

Стандартная библиотека теперь поддерживает использование из упорядоченных словарей в нескольких модули. Модуль configparser использует их по умолчанию. Это позволяет файлы конфигурации должны быть прочитаны, изменены, а затем написано обратно в их Оригинальный заказ.

2 голосов
/ 20 декабря 2016

Если вы хотите сделать шаг дальше, чем ответ Александра Юнгберга, а также отсортировать разделы и содержание разделов, вы можете использовать следующее:

config = ConfigParser.ConfigParser({}, collections.OrderedDict)
config.read('testfile.ini')
# Order the content of each section alphabetically
for section in config._sections:
    config._sections[section] = collections.OrderedDict(sorted(config._sections[section].items(), key=lambda t: t[0]))

# Order all sections alphabetically
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))

# Write ini file to standard output
config.write(sys.stdout)

При этом используются словари OrderdDict (для сохранения порядка) и сортируется прочитанный ini-файл извне ConfigParser путем перезаписи внутреннего словаря _sections.

2 голосов
/ 16 июля 2009

Нет. Библиотека ConfigParser записывает вещи в порядке хэша словаря. (Вы можете увидеть это, если посмотрите на исходный код.) Для этого модуля есть замены, которые лучше работают.

Я посмотрю, смогу ли я найти его и добавить сюда.

http://www.voidspace.org.uk/python/configobj.html#introduction - это тот, о котором я думал. Это не простая замена, но она очень проста в использовании.

0 голосов
/ 16 июля 2009

ConfigParser основан на формате файла ini, который в своем дизайне НЕ должен быть чувствительным к порядку. Если ваш формат файла конфигурации чувствителен к порядку, вы не можете использовать ConfigParser. Это также может сбить людей с толку, если у вас есть формат ini-type, чувствительный к порядку операторов ...

...