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>