Python: достойный формат файла конфигурации - PullRequest
8 голосов
/ 09 июня 2010

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

cachedir = /var/cache
mail_to = me@example.org

job {
   name = my-media
   frequency = 1 day
   source {
      from = /home/michael/Images

   source { }
   source { }       
}

job { }

Я был бы рад чему-то, используя также значительный пробел.

JSON требует слишком много явных синтаксических правил (кавычки, запятые, так далее.).YAML на самом деле довольно хорош, но потребует, чтобы задания были определены как список YAML, который я нахожу немного неудобным для использования.

Ответы [ 6 ]

13 голосов
/ 09 июня 2010

Я думаю, что YAML отлично подходит для этой цели, на самом деле:

jobs:
 - name: my-media
   ...

 - name: something else
   ...

Или, как диктат вместо списка:

jobs:
  my-media:
    frequency: 1 day
    ...
  something-else:
    frequency: 2 day
    ...

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

10 голосов
/ 09 июня 2010

Поскольку встроенный в Python модуль configparser не поддерживает вложенные разделы, я сначала попробую ConfigObj .(См. Вводное руководство здесь ).Согласно домашней странице, это набор функций, о которых стоит упомянуть:

  • Вложенные разделы (подразделы) на любой уровень
  • Значения списка
  • Многострочные значения
  • Строковая интерполяция (подстановка)
  • Интегрирована с мощной системой проверки
    • , включая автоматическую проверку / преобразование типа
    • повторяющиеся секции
    • и разрешениезначения по умолчанию
  • При записи конфигурационных файлов ConfigObj сохраняет все комментарии и порядок элементов и разделов
  • Множество полезных методов и опций для работы с файлами конфигурации (например,метод 'reload')
  • Полная поддержка Unicode

ConfigObj используется Bazaar, Trac, IPython, matplotlib и многими другими крупными проектами Python, поэтому кажется,довольно зрелый и устойчивый для меня (хотя я никогда не использовал его сам).

2 голосов
/ 09 июня 2010

Думаю, вам следует проверить библиотеку libconfig http://www.hyperrealm.com/libconfig/. Для этого должны быть где-то привязки python.

Другое решение - использовать формат json, который уже предоставлен самим python.Искать документацию для модуля JSON.

1 голос
/ 09 июня 2010

Зачем изобретать велосипед?Вы можете использовать:

http://docs.python.org/library/configparser.html

0 голосов
/ 09 сентября 2014

Вы также можете рассмотреть Jsonnet , если ваши потребности превышают эти другие параметры. Jsonnet - это расширение JSON, которое на первый взгляд добавляет комментарии, ослабляет правила запятых и устраняет необходимость в большом количестве цитирования. Но если вы посмотрите глубже, то увидите, что он действительно предоставляет полнофункциональный язык программирования и поддерживает расширение шаблонов с помощью миксинов, импорта файлов и т. Д. Для него существует привязка Python, но его фактическая реализация - C ++.

0 голосов
/ 09 июня 2010

Вы можете использовать систему конфигурации Red-Dove.

http://www.red -dove.com / конфиг-док /

...