【问题标题】:loop iteration - rewriting the output file循环迭代 - 重写输出文件
【发布时间】:2016-07-15 16:34:31
【问题描述】:

我目前的代码可以成功地从两个来源读取信息并将它们正确格式化为输出文件 \_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')

【问题讨论】:

  • 只需移动打开文件的行以在循环内写入。这样每次打开它都会先截断文件。
  • 把它移到哪里?你的意思是取消缩进吗?
  • 将它移到循环中:就像for 循环头在前面,在那个循环中你有你的open(..., 'w')
  • 如果我这样做会弄乱计数,这对于在第二个打开循环中获取其他文件至关重要

标签: python loops io


【解决方案1】:

读入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: 

【讨论】:

  • 如果我这样做,计数不准确
  • 糟糕,我看到了这个问题。你如何获得下一次迭代?你的意思是 for 循环的每次迭代?
  • 对不起,我对你的问题感到困惑。循环通过 for 循环进行迭代 - 对于 info 文件中的每一行,它从 info 文件中的该行和 files(g) 中的相应文件中提取信息。它正确地进行迭代我只是希望它每次都覆盖文件而不是将信息添加到文件中
  • 我编辑了我的答案。我真的不知道你在用 _spec_final.t15 做什么,所以我不能说这肯定会解决你的问题,但这不应该在每次迭代覆盖文件时弄乱你的计数。
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 2021-07-17
  • 2017-11-20
  • 2017-08-26
  • 1970-01-01
  • 2017-02-03
  • 2013-08-16
  • 2022-01-07
相关资源
最近更新 更多