我确实有以下代码,我正在做以下事情。
问题:该函数仅返回第一个模式,不会将相同的模式检查为多行。
代码:
import re
import sys
import os
def find_pattern(file):
with open(file) as fp:
for line in fp:
if "abc" in line:
return line
else:
continue
def check(file):
return_list = []
data=find_pattern(file)
if data != None:
return_list.append(data)
if not data:
return "working"
else:
return return_list
if __name__== '__main__':
file = sys.argv[1]
print check(file)
如果文件有多行包含abc,它将只打印第一行并跳过其他行。我想打印包含abc的所有行。
示例文件
sdfdsffdabcafsfse
asasssadfsdadsadsaddsadadabc
asfasfdsafdfabc
输出以上代码:
sdfdsffdabcafsfse
答案 0 :(得分:1)
您过早从此行的功能返回:
return line
这意味着您退出该函数并且循环在找到第一个实例时停止迭代。
考虑这样的事情,你捕获并返回所有匹配的地方:
def find_pattern(file):
out = []
with open(file) as fp:
for line in fp:
if "abc" in line:
out.append(line)
else:
continue
return out
或者,您可以在一个简单的list comprehension:
中进行管理def find_pattern(file):
with open(file) as fp:
return [line for line in fp if "abc" in line]