2012-12-28 2 views
0

현재 파이썬을 사용하여 입력 파일의 두 줄 사이에서 일부 데이터를 추출하려고합니다. infile은 다음의 -START- 앞에 -END- 조건이 발생하는 경우에만 다음 10 줄의 코드가 필요한 곳에 -START- 줄이 있도록 설정됩니다. -START- 줄은 -END- 앞에 여러 번 나타납니다. 무슨 뜻인지의 Heres는 일반적인 예 :파이썬을 사용하여 종료 줄이있는 경우 데이터 추출



-START-
10 라인은 내가 필요
ㅋ에게
-START-
10 줄 필요가없는


-END-
blah
blah
-START- 10 선이 나는 등

-START-

.... 등등과를 필요가없는

지금까지 난 단지에 대한 -START- + 10 개 라인을 얻을 수 있었다 모든 반복이 있지만, -END- 조건이 다른 -START- 조건보다 먼저 오면 작성해야 할 조건을 지정하는 데는 완전히 손실됩니다. 나는 약간의 newb, 그래서 어떤 도움을 크게 주시면 감사하겠습니다.

보너스 : 새/고유 한 출력 파일에 인쇄 할 START + 10 줄의 각 블록이 필요합니다. 그러나 나는 아직 그걸 가지고 놀아 본 적이 없으므로이 부분을 무시해도 좋습니다.

을 heres 나는 -START- + 10 라인을 인쇄하기 위해이 코드 :

in = open('input.log') 
out = open('output.txt', 'a') 

lines = in.readlines() 
    for i, line in enumerate(lines): 
     if (line.find('START')) > -1: 
      out.write(line) 
      out.write(lines[i + 1]) 
      out.write(lines[i + 2]) 
      out.write(lines[i + 3]) 
      out.write(lines[i + 4]) 
      out.write(lines[i + 5]) 
      out.write(lines[i + 6]) 
      out.write(lines[i + 7]) 
      out.write(lines[i + 8]) 
      out.write(lines[i + 9]) 
      out.write(lines[i + 10]) 
+0

항상 정확히 10 줄입니까, 아니면 START와 END 사이에 "START START와 END 사이에 다른 START가 없다고 가정합니다"라는 것입니까? 다음 중 종료 요인 (END 또는 10 줄) 중 가장 중요한 것은 무엇입니까? –

답변

0

당신이 올바른 궤도에있어. 당신이하고 싶은 것은 당신이 보았던 줄의 목록을 주시하고 그들이가는대로 확인하십시오. 열 라인이 올라 가기 전에 또 다른 START가 보일 경우, 현재 목록을 버리고 새로 시작하십시오. 이 END 항상 올바른 장소에서 발생한다고 가정한다

lines_to_write = [] 
for line in lines: 
    if line.find('START') > -1: 
     lines_to_write = [] # Empty anything that was in the list before 
    if line.find('END') > -1: 
     out.writelines(lines_to_write) # Write all useful lines 
     lines_to_write = [] 
     continue 
    lines_to_write.append(line) 

: 그래서 루프는 다음과 같이 보인다. 당신은 항상 상관없이 그들이 (만큼 그들은하지 더 START 라인과 마찬가지로) 무엇 시작 후 10 줄을 원하는 경우에, 두 번째 조건이 대신과 같습니다

if len(lines_to_write) == 10: 
    out.writelines(lines_to_write) 
    lines_to_write = [] 
    continue 

가 각 블록을 인쇄하려면 새로운 출력 파일 인 out.writelines을 호출 할 때마다 out을 새 출력 파일에 다시 정의하면됩니다. 이렇게하면 필요한만큼 많은 새 파일을 만들 수 있습니다. 파일을 고유 한 파일로 만들려면 특별한 방법이 필요하지 않은 경우 add a timestamp to the filename.

관련 문제