2014-07-24 1 views
-2

다음 코드는 다음 작업을 수행 할 때 사용합니다.파이썬 함수 반환 값 1 회 반복 만

  1. 구문 분석 전체 파일을 검사하고 각 행의 후행을 확인합니다. 패턴이 존재하면, 그 패턴을 주 기능으로 되돌려 값을 출력해야합니다.

문제 :이 기능은 첫 번째 패턴 만 반환하고 동일한 패턴을 여러 줄로 확인하지 않습니다.

코드 : 파일이 ABC를 포함하는 여러 라인이있는 경우

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) 

, 그것은 단지 1 라인을 인쇄하고 다른 라인을 건너 뜁니다. abc가 포함 된 모든 줄을 인쇄하고 싶습니다.

샘플 파일

 sdfdsffdabcafsfse 
    asasssadfsdadsadsaddsadadabc 
    asfasfdsafdfabc 

위의 코드와 출력 :

 sdfdsffdabcafsfse 
+0

하지 마십시오 또는

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이를 관리 할 수 ​​있습니다 'return'이 함수 몸체를 종료시킬 수 있다는 것을 알고 있습니까? –

+0

이것은 비교적 간단 명료 한 문제이지만 샘플 입력 및 출력과 함께 작은 자체 포함 예제를 포함합니다. 이것은 모든 정의에 의해 "좋은 질문"이니, 누군가가 "너무 사소한"것으로 생각하기 때문에 OP를 하찮게 말하는 것은 불공평합니다. –

답변

1

당신은 너무 빨리이 줄에 함수에서 반환됩니다

return line 

당신이 기능을 종료 의미 루프는 첫 번째 인스턴스가 발견 될 때마다 반복을 중단합니다.

가 캡처하고 모든 일치 반환하는 대신 같은 것을 생각해 보자 : 당신은

def find_pattern(file): 
    with open(file) as fp: 
     return [line for line in fp if "abc" in line]