我想在文本文件中搜索模式并发送找到匹配项的文件。 使用 re.finditer 因为我有两个匹配列表(要通过电子邮件发送的文件的模式和名称) 即使有多个匹配项,我也想发送一个文件。 这可能吗?
文件1:文件2:
只拍一拍2
布拉布拉
import re
import itertools
cc_files = ["file1", "file2"]
patlist = ["pat1", "pat2"]
prglist = ["prg1", "prg2"]
for (a, b) in itertools.zip_longest(patlist, prglist):
for cc_file in cc_files:
for i, line in enumerate(open(cc_file)):
for match in re.finditer(a, line):
print('Found on line %s: %s in file %s' % (i+1, match.group(), cc_file))
# email: filename=(b + "_" + cc_file)) </code>`
输出:
在第 1 行找到:文件 file1 中的 pat1
在第 2 行找到:文件 file1 中的 pat1
在第 3 行找到:文件 file1 中的 pat1
在第 1 行找到:文件 file2 中的 pat2
我想要:
文件 1 中的 pat1
file2 中的 pat2
我认为你不需要比这更复杂的东西:
cc_files = ["file1", "file2"]
patlist = ["pat1", "pat2"]
prglist = ["prg1", "prg2"]
for cc_file in cc_files:
text = open(cc_file).read()
for (a, b) in zip(patlist, prglist):
if a in text:
print("File", cc_file, "is program", b)
break
我不确定你为什么使用
zip_longest
。如果两个列表中的任何一个提前结束,您可以用其余的做什么?
如果您需要行号,那么它会变得有点复杂,但不会太复杂。