从上一个循环迭代附加的Python

时间:2016-09-22 16:00:33

标签: python

我有一个非常简单但烦人的问题。我正在逐个读取文件列表,其名称存储在ascii文件中(" file_input.txt")并对它们执行计算。我的问题是,当我打印出计算结果(" print peak_wv,peak_flux"在下面的脚本中)时,它会附加上一个打印输出。以下是我写的代码,请帮助我看看我在这里做错了什么。

from math import*

wv = []
flux = []
fits = []

p = open("file_input.txt","r")
for line in p:
    fits.append(str(line.split()[0]))
p.close()

for j in range(len(fits)):
    f = open("%s"%(fits[j]),"r")
    for line in f:
        wv.append(float(line.split()[0]))
        flux.append(float(line.split()[1]))
    f.close()
    print "%s"%(fits[j])
    for i in range(len(wv)):
        if 6555.0<wv[i]<6569.0:
            m1 = (flux[i+1]-flux[i])/(wv[i+1] - wv[i])
            m2 = (flux[i+2]-flux[i+1])/(wv[i+2] - wv[i+1])
            if m2*m1 < 0:
                peak_wv = (wv[i+2]+wv[i+1]+wv[i])/3.0
                peak_flux = flux[i+1]
                print peak_wv, peak_flux

1 个答案:

答案 0 :(得分:0)

根据您的评论,我认为问题是您要为每个新文件附加数据。您可能希望清除每个新文件的wv和flux。例如:

for j in range(len(fits)):
    wv = []
    flux = []
    f = open("%s"%(fits[j]),"r")

编辑:我还应该指出,您实际上并没有使用任何数学函数,因此您不需要导入,并且有很多方法可以使这些代码更加pythonic。您可以使用&#34; with open&#34;成语以避免必须手动关闭文件。您还可以使用基本for循环和/或&#34;枚举&#34;使你的for循环更清洁。例如,这个:

for j in range(len(fits)):
    f = open("%s"%(fits[j]),"r")
    # code
    f.close()

可能是这样的:

for file in fits:
    with open(file, "r") as f:
        # code

而且:

for i in range(len(wv)):
    if 6555.0<wv[i]<6569.0:

可能是:

for i, cur_wv in enumerate(wv):
    if 6555.0 < cur_wv < 6569.0: