使用正则表达式在文本文件中查找一些单词,然后在不同的文本文件中打印它们
To find some words in a text file using regex and later print them in a different text file
我需要使用正则表达式在文本文件 (origin.txt) 中找到一些词,例如 inherited、INHERITANCE、Ingeritable 等,稍后我想在新的文本文件中打印它们 (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 加上 word/s 中的行号。
您的代码有一些问题:
- 在for里面定义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')]
我需要使用正则表达式在文本文件 (origin.txt) 中找到一些词,例如 inherited、INHERITANCE、Ingeritable 等,稍后我想在新的文本文件中打印它们 (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 加上 word/s 中的行号。
您的代码有一些问题:
- 在for里面定义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')]