Вставка строки в указанном положении текстового файла

Я лично использую крон, но эти части Планирования Заданий django-расширения интересные взгляды.

31
задан Kevin Guan 24 February 2016 в 07:53
поделиться

2 ответа

Наилучший способ внести в файл изменения «псевдо на месте» в 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 может быть установлен безоговорочно только в зависимости от того, начинается ли текущая строка таким образом или нет.Если точная логика, которую вы хотите, немного отличается от этой (это то, что я вывел из вашего кода), нетрудно будет соответствующим образом настроить этот код.

57
ответ дан 27 November 2019 в 21:48
поделиться

Напомним, что итератор - это первоклассный объект. Его можно использовать в нескольких операторах для .

Вот способ справиться с этим без множества сложных на вид операторов 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()
9
ответ дан 27 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: