#python
#python
Вопрос:
У меня есть несколько скриптов на Python, которые настраивают компьютеры Linux. Одна из задач — изменить файл конфигурации для subversion. Этот файл, ~/.subversion/servers
очень прост и выглядит следующим образом:
# store-passwords = no
# store-plaintext-passwords = no
# store-ssl-client-cert-pp = no
# store-ssl-client-cert-pp-plaintext = no
... lots of other options ...
Задача моего скрипта — найти требуемый параметр, например store-plaintext-passwords
, и установить для него указанное значение, например yes
. Проблема в том, что скрипт может выполняться несколько раз на одном компьютере, поэтому, если он запускается в первый раз, этот параметр можно просто прокомментировать, если он запускается во второй раз, его можно раскомментировать и установить в yes
, третий запуск может указать, что он раскомментирован, но установлен в no
и т.д. В настоящее время у меня есть довольно сложный код, который ищет строку в файле, разбивает ее на комментарий / имя / значение, при необходимости раскомментирует ее, при необходимости изменяет значение и заменяет его. Может быть, это более простой способ?
Ответ №1:
Файл ~/.subversion/servers находится в формате INI.
Итак, вы можете использовать ConfigParser для реализации всего, что вам нужно.
Комментарии:
1. ConfigParser хорош, но как он будет обрабатывать комментарии? Мне не нужно, чтобы в результирующем файле были удалены все прокомментированные поля ^_^
2. никому нет дела до комментариев в автоматически сгенерированных файлах или обработанных файлах
3. @Eye of Hell — ConfigParser поддерживает
#
и;
комментарии к стилю. Итак, вы готовы зайти сюда. Это не приведет к удалению комментариев.4.@Senthil Kumaran:
configparser
игнорирует комментарии; вы потеряете все комментарии, если напишете конфигурационный файл с использованием модуля. ideone.com/3n3Vj ideone.com/sGVnF5. Дж.Ф. Себастьян — Спасибо, что указали на это. Здесь все еще открытая ошибка: bugs.python.org/issue1410680