@teodoros

Каким образом выполнить множественную замену строк в файле?

Здравствуйте. Подскажите, как можно сократить этот код?
Т.е. сократить кол-во replace.
def editapache(self,oldmail,mail,name,oldname,charset,oldcharset,vhid):
      with open(filename,'r+') as config:
        config.replace(oldcharset,charset)
        config.replace(oldname,name)
        config.replace(oldmail,mail)
    config.write(config)
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
JaxxDexx
@JaxxDexx
def editapache(self,oldmail,mail,name,oldname,charset,oldcharset,vhid):
      with open(filename,'r+') as config:
        map(config.replace, [oldmail, oldname, oldcharset], [mail, name, charset])
    config.write(config)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Сильно не улучшить: но
def editapache(self,replacements):
      with open(filename,'r+') as config:
        for _from,_to in replacements:
            config.replace(_from,_to)
    config.write(config)


....
editapache(self,[(oldcharset,charset),(oldmail,mail),(oldname,name),("oldstring","newstring")])


А вообще-то лучше использовать темплейты и генерировать когфигурацию из них. Посоветую например "нинзя2" - jinja.pocoo.org/docs/2.9
А еще лучше, возьмите ansible например, в нем и jinja2 в качестве шаблонизатора в комплекте :-)
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
нашел тут на просторах интернета такое решение:
config = "1 2 3 4 5 6"
substitutions = {"2":"7", "3":"6"}
def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

print replace_all(config, substitutions)

вернет
1 7 6 4 5 6
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы