我有一个非常简单但烦人的问题。我正在逐个读取文件列表,其名称存储在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
答案 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: