Мне нужно найти некоторые слова, такие как 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 плюс слово/слова.
В вашем коде были некоторые проблемы:
''
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')]
Вы хотите подсчитать количество вхождений этого слова?
пожалуйста, предоставьте желаемый ввод и вывод в вопросе
Нет, я хочу, чтобы в новом текстовом файле (origin_spp.txt) был указан номер строки, где искомые слова появляются в origin.txt. ВВОД: (номер строки + требуемое слово). ВЫВОД: 352 Наследование 662 унаследовано 785 наследство 880 НАСЛЕДСТВО
@efp0018 efp0018 Я обновил решение, проверьте его
Извините, я новичок в этом. Как я могу это сделать? Просто добавить комментарий? или как?
Спасибо за ваш ответ. Извините за вывод, но мне нужно что-то вроде 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 Не знаю почему. Я очень ценю вашу помощь