我打开了两个文件,EQE_data和Refl_data。我想获取每行EQE_data,它将有八个制表符分隔的列,并在Refl_data中找到与之对应的行,然后进行数据分析并将结果写入输出。因此,对于EQE_data中的每一行,我需要搜索整个Refl_data,直到找到正确的一行。此代码第一次成功,但每次后续输出Refl_data的相同结果。即,我得到Wav1和QE的正确列,但它似乎只执行嵌套for循环一次,所以我得到相同的R,Abs,IQE,这对于第一行是正确的,但此后不正确。
for line in EQE_data:
try:
EQE = line.split("\t")
Wav1, v2, v3, QE, v5, v6, v7, v8 = EQE
for line in Refl_data:
Refl = line.split("\t")
Wav2, R = Refl
if float(Wav2) == float(Wav1):
Abs = 1 - (float(R) / 100)
IQE = float(QE) / Abs
output.write("%d\t%f\t%f\t%f\t%f\n" % (int(float(Wav1)), float(QE), float(R) / 100, Abs, IQE))
except:
pass
答案 0 :(得分:2)
如果Refl_data
是文件,则需要将读指针放回每个循环的开头(使用Refl_data.seek(0)
),或者只是重新打开文件。
或者,首先将所有Refl_data
读入列表,然后循环遍历该列表。
进一步的建议:使用csv
module标签分隔数据,不要使用空白try:
- except:
;总是只捕捉特定的例外。