Python函数仅返回1次迭代的值

时间:2014-07-24 01:12:50

标签: python file function parsing

我确实有以下代码,我正在做以下事情。

  1. 解析整个文件并检查每行中的模式。如果模式存在,则应将该模式返回到main函数并打印该值。
  2. 问题:该函数仅返回第一个模式,不会将相同的模式检查为多行。

    代码:

    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
    

1 个答案:

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