Лучший способ сделать "псевдо-замену" изменений в файле в Python - это модуль fileinput
из стандартной библиотеки:
import fileinput
processing_foo1s = False
for line in fileinput.input('1.txt', inplace=1):
if line.startswith('foo1'):
processing_foo1s = True
else:
if processing_foo1s:
print 'foo bar'
processing_foo1s = False
print line,
Вы также можете указать расширение для резервного копирования, если хотите сохранить старую версию, но это работает в том же ключе, что и ваш код - использует .bak
в качестве расширения для резервного копирования, но также удаляет его после успешного завершения изменения .
Помимо использования правильного стандартного библиотечного модуля, этот код использует более простую логику: для вставки строки "foo bar"
после каждого запуска строк, начинающихся с foo1
, все, что вам нужно - это логическое значение (нахожусь ли я в таком прогоне или нет ?) и значение bool может быть установлено безоговорочно только на основании того, начинается ли текущая строка таким образом или нет. Если точная логика, которую вы хотите, немного отличается от этой (что я и вывел из вашего кода), то нетрудно настроить этот код соответствующим образом.