Python - удаление линий и предыдущих строк (соответствие шаблонам)
Я хочу найти строки, которые начинаются со слова списка. Если слово найдено, я хочу строку, в которой оно стоит, и предыдущую строку, которая будет удалена. Я могу получить строку и предыдущие и распечатать их, но я не могу заставить себя не передавать их в мой выходной файл. Fe:
в-ставить:
This is not supposed to be deleted.
This shall be deleted.
Titel
This is not supposed to be deleted.
This is not supposed to be deleted
выход:
This is not supposed to be deleted.
This is not supposed to be deleted.
This is not supposed to be deleted
Я пробовал это с этим кодом, но я продолжаю получать TypeError: объект 'str' не поддерживает назначение элементов
with open(file1) as f_in, open(file2, 'w') as f_out:
lines = f_in.read().splitlines()
for i, line in enumerate(lines):
clean = True
if line.startswith(('Text', 'Titel')):
for (line[i-1]) in lines:
clean = False
for line in lines:
clean =False
if clean == True:
f_out.write(line)
2 ответа
Сначала отследите, какие строки вы хотите скопировать:
lines_to_keep = []
with open(file1) as f_in:
deleted_previous_line = True
for line in f_in:
if line.startswith(('Text', 'Titel')):
if not deleted_previous_line:
del lines_to_keep[-1]
deleted_previous_line = True
continue
deleted_previous_line = False
lines_to_keep.append(line)
Трюк с deleted_previous_line
необходимо убедиться, что он не удаляет слишком много строк, если последовательные строки начинаются с "Текст" или "Тител".
Затем запишите его в выходной файл
with open(file2, 'w') as f_out:
f_out.writelines(lines_to_keep)
Вам не нужно читать файл сразу. Читайте строки друг за другом и сохраняйте текущую строку, но записывайте ее только после следующего чтения или нет.
with open("file1") as finp, open("file2","w") as fout:
lprev=""
for line in finp:
if line.startswith("Titel") or line.startswith("Text"):
lprev=""
continue
if lprev:
fout.write(lprev)
lprev=line
if lprev:
fout.write(lprev) # write out the last line if needed