Найти - Пользователи
Полная версия: ConfigParser
Начало » Центр помощи » ConfigParser
1
mitya_s_v
Сейчас вот таким макаром записываю изменения в файл с настройками, но есть одни досадный момент, при таком подходе из файла удаляются все комментарии, которые находятся над секцией с параметрами.
Можно это поправить?
config= configparser.configparser.ConfigParser()()
config.read('./data.conf')
config.set('Video','Path',r'C:\itb\itb')
with open('./data.conf', 'w') as configfile:
    config.write(configfile)
Rodegast
http://python.su/forum/post/61220/
doza_and
mitya_s_v
Можно это поправить?
Конечно.
1 Проектируйте систему в которой файлы которые правятся человеком из текстового редактора - правятся только человеком из текстового редактора. Если пишутся программно - то пишутся программно в другие файлы. Если необходимо можно предусмотреть возможность посмотреть содержимое программно записанных файлов в текстовом редакторе.

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

2 Комментарии практически не нужны если правильно выбраны названия ключей.
3 Некоторые люди в качестве комментария используют дополнительные поля. Это актуально например в json.

4 configParser сильно ограничивает возможности сохранения и восстановления конфигурации. Думаю что формат ini файлов устаревший и плохо стандартизированный. Посмотрите в сторону json yaml. Интересный пример конфигурирования с использованием json это редактор sublime text. Почему вам так не сделать?

5 Некоторые наиболее смелые люди используют в качестве конфигурационных файлов питоновские модули. Простота использования просто сказочная. Импортируете модуль и все! А персистентные данные можно и в sqlite хранить.
mitya_s_v
Rodegast
config = ConfigParser()
# Читаем файл
config.readfp(open(path2settings, "r"))
def Citaem():
	# Читаем dbname из секции DataBase
	print config.get("DataBase", "dbname")
def Pisim():
	# Пишим в секцию DataBase
	config.set("DataBase", "dbname", "baza")
	# Записываем файл
	config.write(open(path2settings, "w"))
Так я так и делаю
def write(self, for_record):
        for key, value in for_record.items():
            self.parser.set(self.section, key, value)
        with open(self.path, 'w') as out:
            self.parser.write(out)
mitya_s_v
doza_and
Некоторые люди в качестве комментария используют дополнительные поля. Это актуально например в json.
Интересный вариант, но conf файлы больше нравятся тем, что они поголовно используются в linux + их в ручную легко редактировать (легко читаются).
py.user.next
Надо без комментариев работать с файлом, если он может программно писаться.

doza_and
3 Некоторые люди в качестве комментария используют дополнительные поля.
Не очень уматно. Где гарантия, что другой человек поймёт, что это не какое-то важное поле?

mitya_s_v
но conf файлы больше нравятся тем, что они поголовно используются в linux
Ну, и как в linux обстоит дело с комментариями? Обычная перезапись.
doza_and
mitya_s_v
но conf файлы больше нравятся тем, что они поголовно используются в linux + их
Не могу согласиться. Вот почему:
да в Unix полно конфигурационных файлов. Но это большей частью шелы и изредка conf.

Смотрим документацию:
The ConfigParser class implements a basic configuration file parser language which provides a structure similar to what you would find on Microsoft Windows INI files.
Т.е. ConfigParser читает ini файлы :( к конфам он не имеет никакого отношения. Может в частных случаях он их и прочитает но это на ваш страх и риск.
смотрим в вики:
“ini-файл (англ. Initialization file) — это файл конфигурации, который содержит данные настроек для Microsoft Windows, Windows NT и некоторых приложений.”
“Не существует подробной официальной спецификации формата”
Поэтому трудно ожидать от пользователей интуитивного понятия формата (как писать комментарии например).
Собственно поэтому аргумент про linux мне кажется странным. Там то как раз ini файлы вообще не используются.
На мой взгляд наиболее легкий для чтения и редактирования людьми формат это yaml (конечно в нем есть некоторые идеи взятые из python, но может это плюс?).
py.user.next
doza_and
Там то как раз ini файлы вообще не используются.
Не, настройки kde хранятся в виде
секция
список параметров
...
Смотри файлы вида *rc.

doza_and
да в Unix полно конфигурационных файлов. Но это большей частью шелы и изредка conf.
Это не только шеллы, есть также и конфигурационные файлы программ типа apache, wget или sudo. В них распознаются только комментарии, похожие на шелловские, но на этом сходства заканчиваются, так как там часто вообще своя семантика.
mitya_s_v
py.user.next
Смотри файлы вида *rc.
Во во и я о том
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB