Подтвердить что ты не робот

Какая наилучшая практика с использованием файла настроек в Python?

У меня есть командная строка script, которую я запускаю с большим количеством аргументов. Теперь я пришел к тому, что у меня слишком много аргументов, и я тоже хочу иметь некоторые аргументы в форме словаря.

Итак, чтобы упростить вещи, я хотел бы запустить script с помощью файла настроек. Я не знаю, какие библиотеки следует использовать для разбора файла. Какая наилучшая практика для этого? Я мог бы, конечно, сам что-то взломать, но если для этого есть библиотека, я все уши.

Несколько "требований":

  • Вместо использования pickle я хотел бы, чтобы это был прямой текстовый файл, который можно легко прочитать и отредактировать.
  • Я хочу иметь возможность добавлять в него словарные данные, т.е. поддерживать некоторую форму вложенности.

Упрощенный файл псевдо-примера:

truck:
    color: blue
    brand: ford
city: new york
cabriolet:
    color: black
    engine:
        cylinders: 8
        placement: mid
    doors: 2
4b9b3361

Ответ 1

Отъезд:

http://wiki.python.org/moin/ConfigParserShootout

для списка анализаторов конфигурации, доступных в python. Некоторые поддерживают вложенные файлы конфигурации.

Ответ 2

У вас может быть обычный Python-модуль, например config.py, например:

truck = dict(
    color = 'blue',
    brand = 'ford',
)
city = 'new york'
cabriolet = dict(
    color = 'black',
    engine = dict(
        cylinders = 8,
        placement = 'mid',
    ),
    doors = 2,
)

и используйте его так:

import config
print config.truck['color']  

Ответ 3

Образец конфигурации, который вы предоставили, действительно действителен. Ямл. Фактически, ямл отвечает всем вашим требованиям, реализован на большом количестве языков и очень дружелюбен для людей. Я настоятельно рекомендую вам использовать его. Проект PyYAML предоставляет хороший модуль python, который реализует yaml.

Использование модуля yaml чрезвычайно просто:

import yaml
config = yaml.safe_load(open("path/to/config.yml"))

Ответ 4

Yaml и Json являются простейшими и наиболее часто используемыми форматами файлов для сохранения настроек/конфигурации. PyYaml можно использовать для анализа yaml. Json уже является частью python от версии 2.5. Ямль - это надмножество Джсона. Json решит большинство случаев использования, за исключением многострочных строк, в которых требуется экранирование. Ямл также заботится об этих случаях.

>>> import json
>>> config = {'handler' : 'adminhandler.py', 'timeoutsec' : 5 }
>>> json.dump(config, open('/tmp/config.json', 'w'))
>>> json.load(open('/tmp/config.json'))   
{u'handler': u'adminhandler.py', u'timeoutsec': 5}

Ответ 5

Я нашел это наиболее полезным и простым в использовании https://wiki.python.org/moin/ConfigParserExamples

Вы просто создаете "myfile.ini", например:

[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True

[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson

[Others]
Route: 66

И получить данные типа:

>>> import ConfigParser
>>> Config = ConfigParser.ConfigParser()
>>> Config
<ConfigParser.ConfigParser instance at 0x00BA9B20>
>>> Config.read("myfile.ini")
['c:\\tomorrow.ini']
>>> Config.sections()
['Others', 'SectionThree', 'SectionOne', 'SectionTwo']
>>> Config.options('SectionOne')
['Status', 'Name', 'Value', 'Age', 'Single']
>>> Config.get('SectionOne', 'Status')
'Single'

Ответ 6

Я думаю, что это website сравнение очень полезно. Прочитав это, я использовал формат yaml в качестве моей конфигурации, поскольку он изящный, читаемый, простота и переносимость.

Дополнительная информация о формате yaml может получить от wiki.

Ответ 7

Посмотрите стандартный синтаксический анализатор python.

РЕДАКТИРОВАТЬ. Поскольку вложенность, похоже, очень важна, вы можете рассмотреть возможность использования вашего файла конфигурации через формат JSON.

Затем возникает вопрос использования модуля json с методами dumps и loads, которые будут работать со словарями, вложенными в любой желаемый уровень.