Как искать и удалять строки в Python

В настоящее время я пишу простую программу на питоне, которая позволяет пользователям добавлять и удалять координаты (а также просматривать их) из игры minecraft. Также позволяет ввести заголовок.

В любом случае, мне нужна помощь с функцией удаления. Я хочу найти в текстовом файле определенную строку, например, скажем, что «Нефтяной пул» — это строка, которую я хочу найти. Как бы я это сделал?

После поиска строки я хочу удалить следующие 6 строк (включая строку, которую я искал).

Текстовый файл

Это изображение того, как выглядит запись в текстовом файле. Поэтому, если бы я хотел удалить эту запись, я бы поискал «Огромный нефтяной бассейн». Затем удалите это, а также следующие 6 строк.

Спасибо

Павел


person Paul Alexander Burkart    schedule 09.11.2013    source источник


Ответы (2)


Возможно, вам лучше использовать sed или awk для этой конкретной задачи. Однако, если вы настаиваете на использовании python:

f = open('coordfile', 'r')
newcontents=""
linecounter=-1
for line in f:
    if linecounter>=0:
       linecounter+=1
    if "Oil Pool" in line: 
       linecounter+=1
    if linecounter>6:
       linecounter=-1
    if linecounter==-1:
       newcontents+=line
f.close()

f=open('coordfile', 'w')
f.write(newcontents)
f.close()
person Kristóf Szalay    schedule 09.11.2013
comment
Я пытался удалить Хауса. Мой текстовый файл теперь выглядит так. puu.sh/5cLTg.png - person Paul Alexander Burkart; 09.11.2013
comment
упс, случайно использовал append. Работаю сейчас. Спасибо! - person Paul Alexander Burkart; 09.11.2013

Возможно, что-то вроде этого? Это не будет пытаться загрузить весь файл в память и не будет иметь окно гонки во время перезаписи файла. Однако для этого требуется больше места на диске:

#!/usr/bin/python3

import os

with open('coordfile', 'r') as infile, open('coordfile.temp', 'w') as outfile:
    linecounter = -1
    for line in infile:
        if "Oil pool" in line:
            linecounter = 6
        if linecounter > -1:
            linecounter -= 1
            continue
        linecounter -= 1
        outfile.write(line)

os.rename('coordfile.temp', 'coordfile')
person dstromberg    schedule 09.11.2013