Я лично использую крон, но эти части Планирования Заданий django-расширения интересные взгляды.
Наилучший способ внести в файл изменения «псевдо на месте» в 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 может быть установлен безоговорочно только в зависимости от того, начинается ли текущая строка таким образом или нет.Если точная логика, которую вы хотите, немного отличается от этой (это то, что я вывел из вашего кода), нетрудно будет соответствующим образом настроить этот код.
Напомним, что итератор - это первоклассный объект. Его можно использовать в нескольких операторах для .
Вот способ справиться с этим без множества сложных на вид операторов if и флагов.
with open(tmptxt, 'w') as outfile:
with open(txt, 'r') as infile:
rowIter= iter(infile)
for row in rowIter:
if row.startswith('foo2'): # Start of next section
break
print row.rstrip(), repr(row)
print "foo bar"
print row
for row in rowIter:
print row.rstrip()