Что лучше для создания файла настроек для программ Python, встроенного модуля (ConfigParser) или независимого проекта (ConfigObj) или использования формата сериализации данных YAML? Я слышал, что ConfigObj проще в использовании, чем ConfigParser, хотя это не встроенная библиотека. Я также читал, что PyYAML прост в использовании, хотя использование YAML занимает немного времени. Помимо простоты реализации, что является лучшим вариантом для создания файла настроек / конфигурации?
ConfigObj / ConfigParser против использования YAML для файла настроек Python
Ответы (3)
Использование ConfigObj, по крайней мере, очень просто, а файлы ini в общем намного проще (и используются более широко), чем YAML. Для более сложных случаев, включая проверку, значения и типы по умолчанию, ConfigObj предоставляет способ сделать это с помощью проверки configspec.
Простой код для чтения ini-файла с помощью ConfigObj:
from configobj import ConfigObj
conf = ConfigObj('filename.ini')
section = conf['section']
value = section['value']
Он автоматически обрабатывает значения списка и позволяет использовать многострочные значения. Если вы измените файл конфигурации, вы можете записать его обратно, сохранив порядок и комментарии.
См. Эти статьи для получения дополнительной информации, включая примеры проверки типа:
- http://www.voidspace.org.uk/python/articles/configobj.shtml
- http://www.blog.pythonlibrary.org/2010/01/01/a-brief-configobj-tutorial/
- http://showmedo.com/videotutorials/video?name=10620000&fromSeriesID=1062
Это зависит от того, что вы хотите сохранить в своих файлах конфигурации и как вы их используете.
Если вы выполняете циклическое переключение (yaml → code → 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.
ruamel.yaml
.
- person xmedeko; 01.08.2016
У ConfigParser действительно плохой API, ConfigObj должен быть хорошим, но я никогда его не использовал, для ini-файлов я обычно использую свой собственный парсер.
Однако ini-подобные форматы в любом случае плохо обрабатывают различные типы, последовательности или рекурсивные сопоставления, поэтому я бы просто использовал yaml. Их легко читать и редактировать с помощью редактора, существует стандарт для анализа этих файлов, и у вас нет ни одного из упомянутых недостатков, которые есть у ini-подобных форматов.