ConfigObj / ConfigParser против использования YAML для файла настроек Python
Что лучше для создания файла настроек для программ Python, встроенного модуля (ConfigParser) или независимого проекта (ConfigObj) или использования формата сериализации данных YAML? Я слышал, что ConfigObj проще в использовании, чем ConfigParser, даже если это не встроенная библиотека. Я также читал, что PyYAML прост в использовании, хотя YAML занимает немного времени. Простота реализации в сторону, что является лучшим вариантом для создания настроек / конфигурации файл?
3 ответов
использование ConfigObj, по крайней мере, очень просто и ini-файлы в общие гораздо проще (и более широко используется), чем YAML. Для более сложных случаев, включая проверку, значения по умолчанию и типы, ConfigObj предоставляет способ сделать это через проверку configspec.
простой код для чтения ini-файла с помощью ConfigObj:
from configobj import ConfigObj
conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']
он автоматически обрабатывает значения списка для вас и позволяет многострочные значения. Если вы измените файл конфигурации вы можете запишите его обратно, сохраняя порядок и комментарии.
посмотрите эти статьи для получения дополнительной информации, включая примеры проверки типа:
это зависит от того, что вы хотите сохранить в ваших конфигурационных файлах, и как вы их используете
если вы делаете круглое отключение (yaml→code→yaml) и хотите сохранить комментарии, вы не можете использовать
PyYAML
илиConfigParser
.если вы хотите сохранить порядок ваших ключей (например, при регистрации файлов конфигурации),
PyYAML
не делает этого, если вы не укажете!!omap
(что делает его менее легким для обновления, чем обычный mapping)если вы хотите иметь сложные структуры со списками неназванных элементов, содержащих сопоставления / диктанты, то
ConfigParser
иConfigObj
не поможет вам, поскольку пары ключ-значение INI-файлов должны входить в разделы, а списки могут быть только значениями.
на ruamel.yaml
реализация YAML reader поддерживает все вышеперечисленное 1. Я использовал отличный ConfigObj fuzzyman для сохранения комментариев туда и обратно для долгое время, а также PyYAML для более сложных структур и это сочетает в себе лучшее из обоих миров. ruamel.yaml
включает в себя yaml
утилита, которая может конвертировать ConfigObj
INI файлы в YAML
1 ruamel.yaml-это библиотека YAML, поддерживающая YAML 1.2 (я рекомендую использовать ее, но тогда я являюсь автором пакета). PyYAML поддерживает только (большую часть) YAML 1.1.
ConfigParser имеет действительно плохой API, ConfigObj должен быть хорошим, но я никогда не использовал его, для ini-файлов я обычно реализую свой собственный парсер.
однако ini-подобные форматы не обрабатывают различные типы, последовательности или рекурсивные сопоставления, поэтому я бы просто использовал yaml. Легко читать и редактировать с помощью редактора, есть стандарт для разбора этих файлов, и у вас нет ни одного из упомянутых недостатков ini-подобных форматов.