2016-07-15 12 views
0

私は現在、2つのソースから情報を読み込み、出力ファイル\ _spec_final.t15に正しくフォーマットするこのコードを持っています。現在、情報は次々に印刷されますが、1行/ファイルの情報を印刷して、次の繰り返しで上書きすることをお勧めします。誰もこれを行う方法を知っていますか?ループの反復 - 出力ファイルの書き換え

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ファイルの各行について、infoファイルのその行とファイル(g)の対応するファイルから情報を抽出する。それは正しく反復を行うだけではなく、ファイルに情報を追加するのではなく、毎回ファイルに書き込むことを希望します。 – alli