2016-07-15 4 views
0

현재 두 소스의 정보를 성공적으로 읽은 다음 출력 파일 \ _spec_final.t15로 올바르게 포맷하는이 코드가 있습니다. 현재 정보는 하나씩 차례로 인쇄되지만 한 줄/파일에 대한 정보를 인쇄하고 다음 반복으로 덮어 쓰길 원합니다. 아무도 이것을하는 방법을 아는가?루프 반복 - 출력 파일 다시 쓰기

with open('\\_spec_final.t15', 'w') as f: 
    with open('info.txt', 'rt') as infofile: 
     for count, line in enumerate(infofile): 
      print count 
      lat = float(line[88:94]) 
      lon = float(line[119:127]) 
      year = int(line[190:194]) 
      month = int(line[195:197]) 
      day = int(line[198:200]) 
      hour = int(line[201:203]) 
      minute = int(line[204:206]) 
      second = int(line[207:209]) 
      dur = float(line[302:315]) 
      numpoints = float(line[655:660]) 
      fov = line[481:497] # field of view? 
      sza = float(line[418:426]) 
      snr = 0.0000 
      roe = 6396.2 
      res = 0.5000 
      lowwav = float(lowwav) 
      highwav = float(highwav) 
      spacebw = (highwav - lowwav)/ numpoints 

      d = datetime.datetime(year, month, day, hour, minute, second) 
      f.write('{:>12.5f}{:>12.5f}{:>12.5f}{:>12.5f}{:>8.1f}'.format(sza,roe,lat,lon,snr)) # line 1 
      f.write("\n") 
      f.write('{:>10d}{:>5d}{:>5d}{:>5d}{:>5d}{:>5d}'.format(year,month,day,hour,minute,second)) # line 2 
      f.write("\n") 
      f.write(('{:%Y/%m/%d %H:%M:%S}'.format(d)) + "UT Solar Azimuth:" + ('{:>6.3f}'.format(sza)) + " Resolution:" + ('{:>6.4f}'.format(res)) + " Duration:" + ('{:>6.2f}'.format(dur))) # line 3 
      f.write("\n") 
      f.write('{:>21.13f}{:>26.13f}{:>24.17e}{:>12f}'.format(lowwav,highwav,spacebw,numpoints)) # line 4 
      f.write("\n") 

      with open(files[count], 'r') as g: 
       for line in g: 
        wave_no, intensity = [float(item) for item in line.split()] 
        if lowwav <= wave_no <= highwav: 
         f.write(str(intensity) + '\n') 
+0

루프 안쪽에 글쓰기를 위해 파일을 열 때 줄을 이동하기 만하면됩니다. 그런 식으로 열 때마다 파일이 먼저 자릅니다. – xgord

+0

어디로 이동 하시겠습니까? 너는 그게 들리지 않는 것을 의미합니까? – alli

+0

루프 내부로 옮기십시오 :'for' 루프 헤더가 먼저오고, 그 루프에서'open (..., 'w')'행 – xgord

답변

2

infofile을 읽은 후 파일을 열고 쓰십시오.

각 반복마다 \_spec_final.t15을 열고 덮어 씁니다.

with open('info.txt', 'rt') as infofile: 
    for count, line in enumerate(infofile): 
     print count 
     with open('\\_spec_final.t15', 'w') as f: 
+0

이 작업을 수행하면 카운트가 정확하지 않습니다. – alli

+0

죄송합니다. 다음 반복은 어떻게 받고 있습니까? for 루프의 각 반복, 당신은 의미합니까? – jackiezhu

+0

죄송합니다. 질문에 혼란 스럽습니다. 루프는 for 루프에 의해 반복됩니다. info 파일의 각 줄에 대해 정보 파일의 해당 줄과 파일 (g)의 해당 파일에서 정보를 추출합니다. iteration이 올바르게 수행됩니다. 단지 파일에 정보를 추가하기보다는 매번 파일에 쓰려고합니다. – alli