2014-03-18 3 views
1

약 80000 줄의 텍스트 파일이 있습니다. 다음 단계를 수행하려고합니다. -파일에 모든 분할 선 한 줄만 쓰십시오.

  1. 첫 번째 문자를 기준으로 행을 찾으려고합니다. 나는 그것을 할 수있다.
  2. 이제 7500 줄이 남았습니다.
  3. 줄을 나눠서 line.split()[-2] 문자열을 표시합니다.
  4. 해당 문자열을 텍스트 파일에 쓰고 싶습니다. 문제가 있습니다.

다음은 내 코드입니다. 아무도 내가 잘못하고있는 것을 알아낼 수 있습니까? (그것은 당신이 다시 때마다 웁니다 있음) f5 파일을 다시 열 때마다 않고 코드를 복제 할 header_lines 다음을 통해 루프를 무시

f4 = open("lines.txt") #subroutine to find out number of intervals 
for i in range(header_lines): 
    for line in f4: 
    with open("satsid.txt","w") as f5: 
     if line.startswith(" 12"): 
      print line.split()[-2] 
      f5.write('line.split()[-2]') 
      numints = numints+1; 
     if not line: 
      break  
+0

범위 (header_lines)에있는 'for for i'루프는 무엇입니까? 달성해야합니까? 다시 열지 않거나 처음으로 되감기하지 않고'f4'에서 반복적으로 읽을 수는 없지만 루프에서'i'를 사용하지 않습니다. 그래서 여기서는 완전히 중복됩니다. –

+0

1) 파일을 완전히 열어서 header_line 뒤에 읽습니다. (말은 15입니다. 16 행에서 파일을 읽습니다) – user252614

답변

0

가 :

with open("lines.txt") as f4, open("satsid.txt","w") as f5: 
    for line in f4: 
     if line.startswith(" 12"): 
      f5.write(line.split()[-2] + '\n') 

이 기록하는 1 만 줄의 길이가 ' 12' (공백 다음 1, 그 다음 2)으로 시작하는 경우 줄의 f5으로 변경합니다. 출력 파일에이 값들 사이에 개행 문자를 추가합니다.

당신이 루프 제한, f4에서 라인의 수를 (예를 들어 숫자 header_lines에 저장) 건너 itertools.islice()를 사용해야하는 경우 :

from itertools import islice 

with open("lines.txt") as f4, open("satsid.txt","w") as f5: 
    for line in islice(f4, header_lines, None): 
     if line.startswith(" 12"): 
      f5.write(line.split()[-2] + '\n') 

islice()header_lines 라인을 통해 건너 뜁니다을하고 나머지는 통과 끝날 때까지

+0

대단히 고마워요. 당신의 대답에 감사드립니다. – user252614