2010-08-09 3 views
20

Что лучше для создания файла настроек для программ Python, встроенного модуля (ConfigParser) или независимого проекта (ConfigObj) или с использованием формата сериализации данных YAML? Я слышал, что ConfigObj проще в использовании, чем ConfigParser, хотя он не является встроенной библиотекой. Я также прочитал, что PyYAML прост в использовании, хотя YAML занимает немного времени для использования. Простота реализации в стороне, что является лучшим вариантом для создания файла настроек/конфигурации?ConfigObj/ConfigParser против использования файла настроек YAML для Python

ответ

8

Использование ConfigObj по крайней мере очень прост и ini-файлы в вообще намного проще (и более широко используется), чем YAML. Для более сложных случаев, включая проверки, значения и типы по умолчанию, ConfigObj предоставляет способ сделать это с помощью проверки конфигов.

Простой код, чтобы прочитать INI файл с ConfigObj:

from configobj import ConfigObj 

conf = ConfigObj('filename.ini') 
section = conf['section'] 
value = section['value'] 

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

Смотрите эти статьи для получения дополнительной информации, включая примеры проверки типа:

5

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

Однако ini-подобные форматы не обрабатывают разные типы, последовательности или рекурсивные отображения в любом случае, поэтому я бы просто использовал yaml. Его легко прочитать и отредактировать с помощью редактора, есть стандарт для разбора этих файлов, и у вас нет ни одного из упомянутых ниже-ini-подобных форматов.

+3

ConfigObj обрабатывает типы и последовательности прекрасно :-) – fuzzyman

6

Это зависит от того, что вы хотите хранить в вашей конфигурации файлы и способы их использования

  • Если круглые отключения (YAML → → код YAML) и хотите комментарии сохранены, вы не можете использовать PyYAML или ConfigParser.

  • Если вы хотите сохранить порядок ключей (например, когда вы проверяете в ваших конфигурационных файлах), PyYAML не делать, если не указано !!omap (что делает его менее легко обновлять, чем нормальное отображение)

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

Реализация считывателя YAML ruamel.yaml поддерживает все вышеперечисленное ¹. Я использовал превосходный ConfigObj fuzzyman для сохранения комментариев в оба конца в течение длительного времени, а также PyYAML для более сложных структур, и это сочетает в себе лучшее из обоих миров.ruamel.yaml включает yaml утилита, которая может конвертировать ConfigObj INI файлы YAML


¹ ruamel.yaml библиотека YAML, которая поддерживает YAML 1.2 (я рекомендую использовать это, но тогда я являюсь автором пакета). PyYAML поддерживает только (большинство) YAML 1.1.

+0

спасибо за указание ruamel.yaml. – jgomo3

+1

Я пропустил отказ от авторских прав, автор автору этого сообщения также является автором 'ruamel.yaml'. – xmedeko

+0

@xmedeko, на который ссылается '(бесстыдный плагин)', но я признаю, что он должен быть более явным (как я сделал в более поздних ответах, например [здесь] (http://stackoverflow.com/a/29415791/ 1307905) и [здесь] (http://stackoverflow.com/a/36631057/1307905). Этот ответ с самого начала я начал опубликовать ruamel.yaml. – Anthon

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

  • Нет связанных вопросов^_^