我有一个文件,我想创建一个逐行读取的函数,如果在一行中找到某个模式,则将其复制到一个字符串中。所以像这样:
def readfile(file):
lines = ""
for l in file.readlines():
if pattern in l:
lines = l
return lines
print (readfile(file))
为什么它只有一行。这是回归的问题吗? 有人可以帮忙吗?
答案 0 :(得分:1)
它只返回一行(匹配的最后一行),因为所有其他行已被代码行替换为变量行
lines = l
为了返回匹配的所有行,您可以将它们放入列表中:
def readfile(file):
lines = []
for l in file.readlines():
if pattern in l:
lines.append(l)
return lines
#alternatively:
#return [l for l in file.readlines() if pattern in l]
lines = readfile(file)
for line in lines:
print(line)
或者,通过使它成为生成器,在匹配时返回每一行:
def readfile(file):
for l in file.readlines():
if pattern in l:
yield l
for line in readfile(file):
print(line)
答案 1 :(得分:0)
您将行的值设置为l。这意味着它在每次循环迭代期间被覆盖。请尝试添加。
lines = lines + l
答案 2 :(得分:0)
您也可以尝试list(f)
,如下所示:
with open(path) as f:
myList = list(f)