Python добавляет строку после появления шаблона

Как мне добавить строку после появления шаблона? Я знаю, что строки неизменны. Но есть ли способ сделать это?

Например, вход:

condor  t   airline airline
eight   n   0   flightnumber
nine    n   0   flightnumber
five    n   0   flightnumber
hallo   t   0   sentence

ожидаемый результат:

<s> <callsign> <airline> condor </airline> 
<flightnumber> eight nine five </flightnumber> 
</callsign> hallo </s>

Программа:

import re
import string
import csv
out = ''
with open('input.txt', 'r') as f:
  reader = csv.reader(f, delimiter='\t')
  for row in reader:
    if (row == "\n"):
        out += "\n"
    if 'airline' in row:
        print '<callsign> <airline>' + row[0] + '</airline></callsign>'
    if 'sentence' in row: 
        print '<s>' + row[0] + '</s>'
    if 'flightnumber' in row: 
        print '<flightnumber>' + row[0] + '</flightnumber>'

Производит:

<callsign> <airline>condor</airline></callsign>
<flightnumber>eight</flightnumber>
<flightnumber>nine</flightnumber>
<flightnumber>five</flightnumber>
<s>hallo</s>

Есть ли способ, которым я могу сделать это ^ к ожидаемому результату?

2 ответа

Решение

Вы создаете новую строку с замененным на нее шаблоном, за которым следует то, что вы хотите добавить, и заменяете исходную строку новой.

Однако, как видно из вашего примера, вам нужно больше, чем просто замена; вам нужно собрать строки с flightnumber так что вы можете объединить их содержимое в один тег.

Я думаю, вам нужно будет предоставить более подробную информацию о правилах, которым вы хотите следовать, чтобы получить более подробный ответ.

Вы можете использовать формат строки и zip для этого:

txt='''\
condor  t   airline airline
eight   n   0   flightnumber
nine    n   0   flightnumber
five    n   0   flightnumber
hallo   t   0   sentence'''

template='''\
<s> <callsign> <airline> {} </airline> 
<flightnumber> {} </flightnumber> 
</callsign> {} </s>'''

col=zip(*[line.split() for line in txt.splitlines()])[0]

print template.format(col[0], ' '.join(col[1:4]), col[4])

Печать:

<s> <callsign> <airline> condor </airline> 
<flightnumber> eight nine five </flightnumber> 
</callsign> hallo </s>
Другие вопросы по тегам