0

EQE_data と Refl_data の 2 つのファイルを開いています。タブ区切りの 8 つの列を持つ EQE_data の各行を取得し、それに対応する Refl_data の行を見つけてから、データ分析を行い、結果を出力に書き込みます。したがって、EQE_data の各行について、適切な行が見つかるまで Refl_data 全体を検索する必要があります。このコードは 1 回目は成功しますが、その後は毎回 Refl_data に対して同じ結果を出力しています。つまり、Wav1 と QE の正しい列を取得しますが、ネストされた for ループを 1 回だけ実行しているように見えるため、同じ 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
4

1 に答える 1

2

がファイルの場合Refl_data、( を使用して)各ループの先頭に読み取りポインターを戻すRefl_data.seek(0)か、単にファイルを再度開く必要があります。

または、最初Refl_dataにすべてをリストに読み込み、代わりにそのリストをループします。

さらなるアドバイス:csvモジュールをタブ区切りデータに使用し、空白のtry:-を使用しないでくださいexcept:。常に特定の例外のみをキャッチします。

于 2012-09-24T15:59:32.980 に答える