ConfigObj / ConfigParser и использование YAML для файла настроек Python - PullRequest
20 голосов
/ 10 августа 2010

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

Ответы [ 3 ]

8 голосов
/ 12 августа 2010

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

Простой код для чтения INI-файла с ConfigObj:

from configobj import ConfigObj

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

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

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

8 голосов
/ 24 ноября 2014

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

  • Если вы выполняете циклическое переключение (yaml & rarr; code & rarr; yaml) и хотите сохранить комментарии, вы не можете использовать PyYAML или ConfigParser.

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

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

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


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

5 голосов
/ 10 августа 2010

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

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

...