Как удалить строки из файла до указанного символа c? [Python] - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь написать сценарий python, который просматривает файл и сканирует его до тех пор, пока не будет найдено заданное слово, затем из этого слова он удаляет все приходящие строки из файла, пока не будет найдено следующее заданное слово, как показано здесь:

Line1
Line2
Line3
Key-Word
Line4
Line5
Key-Word2
Line6
Line7

Результат будет:

Line1
Line2
Line3
Key-Word2
Line6
Line7

Пока мне удалось заставить его обнаруживать ключевое слово, но не уверен, как я могу заставить его удалить ближайшие строки и затем продолжайте с ключевого слова 2 и далее

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

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

Вам нужно быть осторожным, чтобы удалить пустое пространство между строками, так как символы "\ n" будут добавлены к вашей строке.

keyword_found = False
with open("line_file.txt", "r") as f:
    lines = f.readlines()
with open("line_file.txt", "w") as f:
    while (lines):
        line = lines.pop(0).strip("\n")
        if line == 'you':
            keyword_found = True
        if line == 'friend':
            keyword_found = False
        if not keyword_found:
            f.write(line + "\n")
0 голосов
/ 08 мая 2020

Прочтите строки файла и запишите их обратно, за исключением строк от кнопки запуска до кнопки остановки, вот пример:

def erase(file_name: str, start_key: str, stop_key: str):
    """
    This function will delete all line from the givin start_key
    until the stop_key. (include: start_key) (exclude: stop_key)
    """
    try: 
        # read the file lines
        with open(file_name, 'r+') as fr: 
            lines = fr.readlines()
        # write the file lines except the start_key until the stop_key
        with open(file_name, 'w+') as fw:
            # delete variable to control deletion
            delete = False
            # iterate over the file lines
            for line in lines:
                # check if the line is a start_key
                # set delete to True (start deleting)
                if line.strip('\n') == start_key:
                     delete = True
                # check if the line is a stop_key
                # set delete to False (stop deleting)
                elif line.strip('\n') == stop_key:
                     delete = False
                # write the line back based on delete value
                # if the delete setten to True this will
                # not be executed (the line will be skipped)
                if not delete: 
                    fw.write(line)
    except RuntimeError as ex: 
        print(f"erase error:\n\t{ex}")

Использование:

erase('file.txt', 'Key-Word', 'Key-Word2')

file.txt (ввод):

Line1
Line2
Line3
Key-Word
Line4
Line5
Key-Word2
Line6
Line7

после запуска функции:

Line1
Line2
Line3
Key-Word2
Line6
Line7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...