2014-03-26 2 views
0

다음 예제 텍스트 파일이 있습니다 (아래 표시된 형식입니다). "구성 생성 중 ...."과 "`모든 계정 로그 표시"사이의 모든 것을 추출하고자합니다.이 부분은 내가 관심있는 부분의 시작과 끝입니다.두 줄의 문자열 사이에서 텍스트 파일의 줄을 추출합니다.

일부 줄
몇 줄 더 줄
생성 구성 ....
관심 설정
관심 설정
관심 설정
`쇼 계정 로그
all` 몇 줄
좀 더 라인

다음 코드를 작성했지만`show accounting log all '을 찾은 후에 텍스트 파일에 줄을 추가하는 것을 멈추지 않습니다.

config_found = False 
    with open(filename, 'rb') as f: 
     textfile_temp = f.readlines() 

    for line in textfile_temp: 
     if re.match("Generating configuration....", line): 
      config_found = True 
     if re.match("`show accounting log all`", line): 
      config_found = False 
     if config_found: 
      i = line.rstrip() 
      textfile.append(i) 

내 진술에 어떤 오류가 있습니까?

+4

의 모습

['interested config', 'interested config', 'interested config'] 

대신 당신은 다음과 같이 분할을 사용할 수 있습니다 귀하의 예제 콘텐츠에서 그들은'show accountin g log all' 그리고 코드에서 작은 따옴표를 찾고 있으므로 결코 일치하지 않을 것입니다. (일반 문자열 비교 대신 regex 모듈을 사용하는 이유는 무엇입니까?) – TessellatingHeckler

답변

0

config_found은 루프의 외부에 범위가없는 것처럼 보입니다.

루프 앞에 config_found = False을 넣으면 정상적으로 작동합니다.

2

작은 따옴표 대신에 비교 식에 역 따옴표를 사용해야하며 문자열 사이에 추출 할 때 if 및 elif를 사용할 수 있습니다. 나는 다음과 같이 수정 한 그것은 작동하고 :

with open('file.txt', 'rb') as f: 
    textfile_temp = f.readlines() 
    config_found = False 
    textfile = [] 
    for line in textfile_temp: 
     if re.match("`show accounting log all`", line): 
      config_found = False 
     elif config_found: 
      i = line.rstrip() 
      textfile.append(i) 
     elif re.match("Generating configuration....", line): 
      config_found = True 
    print textfile 

출력 :

with open('file.txt', 'rb') as f: 
    textfile_temp = f.read() 
    print textfile_temp.split('Generating configuration....')[1].split("`show accounting log all`")[0] 

출력은 :

interested config 
interested config 
interested config 
+0

"역 따옴표"문자는 대개 "탭"키 바로 위에있는 키보드에서 "물결표"와 동일한 키에서 찾을 수 있습니다 "(~) 키. – justhalf

+0

user3 감사합니다. 원래 코드에서 if 문이 잘못되었습니다 (백틱을 수정했지만 여전히 실패했습니다). 나는 그것이 왜 효과가 없었는지 이해할 수없는 것 같습니다. – mmxool

+0

config_found 변수를 변경 한 후에 결과 변수를로드하고 있습니다. 그 반대가되어야합니다. – user3

관련 문제