返回只获得一行

时间:2015-03-05 15:44:33

标签: python python-3.x

我有一个文件,我想创建一个逐行读取的函数,如果在一行中找到某个模式,则将其复制到一个字符串中。所以像这样:

def readfile(file):
    lines = ""
    for l in file.readlines():
        if pattern in l:
            lines = l
    return lines


print (readfile(file))

为什么它只有一行。这是回归的问题吗? 有人可以帮忙吗?

3 个答案:

答案 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)