Попытка пропустить строки, которые соответствуют регулярному выражению при записи в файл, но новый файл имеет дополнительные новые строки - PullRequest
1 голос
/ 07 апреля 2020

Это ответвление на вопрос, который я задал здесь .

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

info = {'#check here 1':{'action':'read'}, '#check here 2':{'action':'delete'}}

search_pattern = re.compile(r'.*(#.+)')        

    with open(input_file_name, "r") as old_file, open(output_file_name, "w+") as new_file:
        lines = old_file.readlines()

        for line in lines:
            edit_point = search_pattern.search(line)
            if edit_point:
                result = edit_point.group(1)
                if result in info and info[result]["action"] == "insert":#insert new lines to file
                    print("insert information to file")
                    new_file.write("\n".join([str(n) for n in info[result]["new_lines"]]))
                    new_file.write(result)
                elif result in info and info[result]["action"] == "delete":#skip lines with delete action
                    print("found deletion point. skipping line")
                else:#write to file any line with a comment that is not in info
                    new_file.write(line)
            else:#write lines that do not match regex for (#.*)
                new_file.write(line)

По сути, когда вы отправляете словарь, программа перебирает файл в поисках комментариев. Если комментарий есть в словаре, он проверит соответствующее действие. Если действие вставить, оно запишет строки в файл. Если это удалить, он пропустит эту строку. Любая строка, в которой нет комментария, должна быть записана в новый файл.

Моя проблема в том, что когда я удаляю строку из файла, появляется дополнительная строка, где они были раньше. Например, если у меня есть список:

hello world

how are you #keep this
I'm fine #check here 2
whats up

Я ожидаю, что результат будет:

hello world

how are you #keep this
whats up

Но вместо этого у меня есть пустая строка:

hello world

how are you #check here 2

whats up

Я подозреваю, что это мой последний оператор else, который записывает в файл любую строку, которая не соответствует edit_point, в данном случае новые строки. Тем не менее, я понимаю, что для l oop должна go строка за строкой, и просто go этой строки. Кто-нибудь может сказать мне, что мне здесь не хватает?

...