Чтобы найти некоторые слова в текстовом файле с помощью регулярного выражения, а затем распечатать их в другом текстовом файле

Мне нужно найти некоторые слова, такие как inheritance, INHERITANCE, Ingeritable и т. д., используя регулярное выражение, в текстовом файле (origin.txt), а позже я хочу напечатать их в новом текстовом файле (origin_spp.txt) и строке, где они были найдены.

это мой код

re_pattern_string = r'(?:inherit|INHERIT|Inherit)*\w'

print('Opening origin.txt')
with open('origin.txt', 'r') as in_stream:
    print('Opening origin_spp.txt')
    with open('origin_spp.txt', 'w') as out_stream:
        for num, line in enumerate (in_stream):
        re_pattern_object = re.compile(re_pattern_string)
        line = line.strip()
        inherit_list = line.split()
        temp_list = re_pattern_object.findall('line')
        complete = origin_list.append('temp_list')
        for word in temp_list:
            out_stream.write(str(num) + '\t{0}\n'.format(word))

print("Done!")
print('origin.txt is closed?', in_stream.closed)
print('origin_spp.txt is closed?', out_stream.closed)

if __name__ == '__main__':
    print(temp_list)

Не могли бы вы мне помочь? Я ничего не получаю, и я не знаю, где ошибка.

заранее спасибо

Мне нужно напечатать слова, которые я хочу найти в origin.txt, в другом текстовом файле.

Этот новый файл должен содержать номер строки в origin.txt плюс слово/слова.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем коде были некоторые проблемы:

  • Излишне определять re.compile внутри для.
  • для re_pattern_object.findall('line') и origin_list.append('temp_list') не заключайте переменные в ''
  • с findall нам не нужно повторять строки, это работает для всего текста.

Поскольку вы не предоставили ввод и вывод, я просто догадываюсь, что вы хотите:

import re

re_pattern_string = r'((?:inherit|INHERIT|Inherit)(\w*))'
originmain_list = []
re_pattern_object = re.compile(re_pattern_string)
print('Opening origin.txt')
with open('origin.txt', 'r') as in_stream:
    print('Opening origin_spp.txt')
    with open('origin_spp.txt', 'w') as out_stream:
        for num, line in enumerate(in_stream):
            temp_list = re_pattern_object.findall(line)
            for word in temp_list:
                out_stream.write(str(num) + '\t{0}\n'.format(word[0]))
                originmain_list.append((num, word[0]))

print("Done!")
print('origin.txt is closed?', in_stream.closed)
print('origin_spp.txt is closed?', out_stream.closed)
print(originmain_list)

если origin.txt содержит:

inheritxxxxxxx some text INHERITccccc some text
Inheritzzzzzzzz some text
inherit some text INHERIT some text
Inherit some text

вывод в origin_spp.txt будет

0   inheritxxxxxxx
0   INHERITccccc
1   Inheritzzzzzzzz
2   inherit
2   INHERIT
3   Inherit

Вывод командной строки будет:

Opening origin.txt
Opening origin_spp.txt
Done!
origin.txt is closed? True
origin_spp.txt is closed? True
[(0, 'inheritxxxxxxx'), (0, 'INHERITccccc'), (1, 'Inheritzzzzzzzz'), (2, 'inherit'), (2, 'INHERIT'), (3, 'Inherit')]

Спасибо за ваш ответ. Извините за вывод, но мне нужно что-то вроде 352 Наследование 662 унаследовано 785 наследство 880 НАСЛЕДОВАНИЕ. Однако то, что я получил с вашим предложением, было: Raceback (последний последний вызов): Файл "origin_spp_2.py", строка 35, в <module> re_pattern_object = re.compile(re_pattern_string) File "/usr/lib/python3.8 /sre_parse.py", строка 668, в _parse поднять source.error("нечего повторять", re.error: нечего повторять на позиции 29 Не знаю почему. Я очень ценю вашу помощь

shawn_smith_kaviedes 23.03.2022 09:30

Вы хотите подсчитать количество вхождений этого слова?

S4eed3sm 23.03.2022 09:58

пожалуйста, предоставьте желаемый ввод и вывод в вопросе

S4eed3sm 23.03.2022 09:59

Нет, я хочу, чтобы в новом текстовом файле (origin_spp.txt) был указан номер строки, где искомые слова появляются в origin.txt. ВВОД: (номер строки + требуемое слово). ВЫВОД: 352 Наследование 662 унаследовано 785 наследство 880 НАСЛЕДСТВО

shawn_smith_kaviedes 23.03.2022 10:11

@efp0018 efp0018 Я обновил решение, проверьте его

S4eed3sm 23.03.2022 10:18

Извините, я новичок в этом. Как я могу это сделать? Просто добавить комментарий? или как?

shawn_smith_kaviedes 23.03.2022 10:45

Другие вопросы по теме