Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Конфиг без секций


Автор: Karadul 19.5.2012, 18:05
Можно так сделать? 

Автор: bilbobagginz 20.5.2012, 00:50
xml/yaml/JSON


Автор: Karadul 20.5.2012, 15:29
Надо обычный конфиг файл, как system.ini в винде, но без секций. xml сложнее, а json нечитаем.

Автор: rsm 21.5.2012, 14:32
Чтение плоского (без иерархии) конфига пишется в две строчки:

Код

"""
принимает аргументом путь к файлу, выдаёт словарь
комментарии (строки, начинающиеся с символа '#') игнорируются
"""
def read_options_from_file(file_path):
    return dict(map(lambda value: value.strip(), line.split('=', 1)) \
        for line in open(file_path, "r") if '=' in line and not line.startswith('#'))

print(read_options_from_file("nya.conf"))

Пример конфига:

Код

# это комментарий
bar=foo
foo = bar = 100500

На выходе получаем удобный словарь:

Код

{'foo': 'bar = 100500', 'bar': 'foo'}

Недостаток - если в конфиге есть одинаковые ключи, в итоговый словарь попадёт только последнее значение ключа.

Автор: Karadul 21.5.2012, 15:20
Цитата

foo = bar = 100500

Похоже на нарушение формата?
А почему дефолтовый модуль хочет секции? Где-то написано, что они обязательно должны быть?

Автор: rsm 22.5.2012, 02:36
Цитата(Karadul @  21.5.2012,  17:20 Найти цитируемый пост)
Похоже на нарушение формата?

Нарушение, которое нормально обрабатывается.

Цитата(Karadul @  21.5.2012,  17:20 Найти цитируемый пост)
Где-то написано, что они обязательно должны быть?

В официальной http://docs.python.org/py3k/library/configparser.html#supported-ini-file-structure.

Автор: Karadul 22.5.2012, 13:53
Я имею в виду общую, не связанную с языками документацию на ини файл.

Цитата(rsm @  22.5.2012,  02:36 Найти цитируемый пост)
Нарушение, которое нормально обрабатывается.

Тьху, все нормально. Мне показалось, что foo и bar будет 100500.

Автор: rsm 22.5.2012, 17:51
Цитата(Karadul @  22.5.2012,  15:53 Найти цитируемый пост)
общую, не связанную с языками документацию на ини файл

Её, походу, никогда и не было. Лепят кому как вздумается smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)