Я могу использовать модуль ConfigParser в python для создания ini-файлов с помощью методов add_section и установки (см. Образец в http://docs.python.org/library/configparser.html). Но я ничего не вижу о добавлении комментариев. Это возможно? Я знаю об использовании # и; но как заставить объект ConfigParser добавить это для меня? Я ничего не вижу об этом в документах для configparser.Добавление комментария с помощью configparser
ответ
Если вы хотите избавиться от задней =
, вы можете унаследовать ConfigParser.ConfigParser
как предложено atomocopter и осуществлять ваш собственный write
метод для замены первоначального:
import sys
import ConfigParser
class ConfigParserWithComments(ConfigParser.ConfigParser):
def add_comment(self, section, comment):
self.set(section, '; %s' % (comment,), None)
def write(self, fp):
"""Write an .ini-format representation of the configuration state."""
if self._defaults:
fp.write("[%s]\n" % ConfigParser.DEFAULTSECT)
for (key, value) in self._defaults.items():
self._write_item(fp, key, value)
fp.write("\n")
for section in self._sections:
fp.write("[%s]\n" % section)
for (key, value) in self._sections[section].items():
self._write_item(fp, key, value)
fp.write("\n")
def _write_item(self, fp, key, value):
if key.startswith(';') and value is None:
fp.write("%s\n" % (key,))
else:
fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t')))
config = ConfigParserWithComments()
config.add_section('Section')
config.set('Section', 'key', 'value')
config.add_comment('Section', 'this is the comment')
config.write(sys.stdout)
Вывод этого сценария:
[Section]
key = value
; this is the comment
Примечание:
- Если вы используете имя параметра, имя которого начинается с
;
и значением устанавливается вNone
, будет считаться комментарием. - Это позволит добавлять комментарии и записывать их в файлы, но не читать их. Для этого у вас будет реализован собственный метод
_read
, который позаботится о разборе комментариев и, возможно, добавит методcomments
, чтобы можно было получить комментарии для каждого раздела.
Это выглядит великолепно. Я посмотрю, когда я получу некоторое время ... –
Он отлично работает. Большое спасибо. Но я не понимаю, что делает метод write. Мне это не нужно, или я что-то упускаю? –
Метод 'write' - это тот, который вы используете для записи в файл конфигурации. Вам это нужно, чтобы избежать использования реализации по умолчанию. – jcollado
сделать подкласс, или проще:
import sys
import ConfigParser
ConfigParser.ConfigParser.add_comment = lambda self, section, option, value: self.set(section, '; '+option, value)
config = ConfigParser.ConfigParser()
config.add_section('Section')
config.set('Section', 'a', '2')
config.add_comment('Section', 'b', '9')
config.write(sys.stdout)
Производит этот вывод:
[Section]
a = 2
; b = 9
Спасибо за решение. Я мог бы, конечно, сделать то, что вы сказали (+1 для метода add_comment). Но это не решит проблему с уродливым трейлинг = –
Чтобы избежать буксировку «=» вы можете использовать SED команды с модулем подпроцесса, как только вы написали экземпляр конфигурации в файл
**subprocess.call(['sed','-in','s/\\(^#.*\\)=/\\n\\1/',filepath])**
Filepath является INI файл вам сгенерированный с помощью ConfigParser
- 1. Добавление аргументов __init__ из ConfigParser
- 2. Добавление комментария к столбцам
- 3. Проверить настройки с помощью configparser
- 4. Добавление комментария создать страницу
- 5. Добавление комментария к Settings.Designer.cs
- 6. как интерполировать имя раздела с помощью configparser
- 7. Добавление комментария к YAML программно
- 8. Добавление комментария к excel с использованием VBA
- 9. Добавление комментария к сообщению в блоге с помощью UpdateView
- 10. Добавление комментария отключает управление содержимым с помощью пробела
- 11. Добавление комментария к XML-документам
- 12. Добавление условного комментария от codebehind
- 13. Добавление комментария к ячейке макроса
- 14. добавление комментария к устаревшему методу
- 15. Чтение исходного раздела с помощью ConfigParser
- 16. Значения слова «Typecast», полученные с помощью ConfigParser
- 17. Попытка установить ошибку pip с помощью configparser
- 18. Заселите класс от ини с помощью ConfigParser
- 19. Oracle SQL добавление многострочного комментария таблицы или комментария столбца
- 20. Добавление комментария к видео vimeo в iOS
- 21. ConfigParser с элементами Unicode
- 22. Добавление комментария к запросу в PSQL
- 23. Добавление комментария помощника к полю laravel
- 24. от ConfigParser импорта SafeConfigParser ImportError: Нет модуль с именем 'ConfigParser'
- 25. PHP Добавление поля комментария в рейтинговую систему
- 26. configparser сбрасывает комментарии при написании
- 27. Configparser Integer
- 28. Добавление комментария к полю при создании таблицы?
- 29. Добавление комментария к статье в CakePHP 3
- 30. Добавление символа комментария наиболее простым способом
См. принятый ответ на вопрос [Python ConfigParser вопрос о написании комментариев к файлам] (http://stackoverflow.com/questions/6620637/python-configparser-question-about-writing-comments-to -fil es) – Chris
Oh. Я не видел этого ответа. Сожалею! Это не красивое решение, но я думаю, что так я должен это делать. Благодаря! –
Да, это позор о завершающем знаке '=', но, похоже, вы ничего не можете сделать по этому поводу! – Chris