0

私が髪を引き裂いてきた長いコードがあります。入力ファイルを実行すると

# 96.52 0.0036
#
#
0.860    9.38   0.938   35   I      I_band
1.235    6.452   0.030  41   J      2MASS 
1.66     5.471   0.021  42   H      2MASS 
2.16     5.069   0.023  43   K      2MASS 
9.0          9.760e-01   8.51e-03   0    AKARI09     0.52
18.0     2.609e-01   3.67e-02   0    AKARI18     0.52
#

私は得る

File 'myfile.py', line 811, in <module>
err=np.append(err,data[i][2])
IndexError: string index out of range

ただし、実行すると

# 96.52 0.0036
#
#
0.860    9.38   0.938   35   I      I_band
1.235    6.452   0.030  41   J      2MASS 0.134
1.66     5.471   0.021  42   H      2MASS 0.134
2.16     5.069   0.023  43   K      2MASS 0.134
9.0          9.760e-01   8.51e-03   0    AKARI09     0.52
18.0     2.609e-01   3.67e-02   0    AKARI18     0.52
#

コードは正常に機能します。これらの例はどちらも .dat ファイルとして保存されており、コードを送信するように求められます。

私はこれをおそらく24時間理解しようとしてきましたが(私は知っていますよね?)、まったく成功していません。問題を特定できません。この時点で、どんなアドバイスも歓迎されます。いつもありがとう!

編集: (800 行あたりで) xranges を 'range' に変更し、append に戻ると (792 行と 798 行を参照)、次のエラーが発生します。

File 'myfile.py', line 807, in <module>
 if(data[i]=='#'): comments=comments+1
IndexError: list index out of range
4

1 に答える 1

1

あなたのコードの 1000 行以上を追う時間はありません (そして、多くの人がそうするとは思えません)。しかし、私が見たところ、あなたはファイルを読む方法を一から作り直そうとしているようです。data一部の列の配列に期待するタイプ/サイズがないため、エラーが発生しています。

numpyloadtxtgenfromtxt関数に慣れることをお勧めします。おそらく、1 回の呼び出しでファイルのデータのほとんどを必要な形式で取得できます。(コード内のすべてのオープン呼び出しはバイナリのように見えるため、テキスト ファイルがどのように入力されるかわかりません。) 形式が正確にはわかりませんが、たとえば、次のようなことを行います。

import numpy as np
result = np.genfromtxt('file', dtype=[('wave','f'), ('flux', 'f'),
                                      ('err', 'f'), ('code', 'i'), 
                                      ('band', 'S8'), ('survey', 'S8')])

dtype結果は、文字列でインデックス付けできる構造化配列です。

In [16]: result['wave']
Out[16]:
array([  0.86000001,   1.23500001,   1.65999997,   2.16000009,
         9.        ,  18.        ], dtype=float32)

In [17]: result['err']
Out[17]:
array([ 0.93800002,  0.03      ,  0.021     ,  0.023     ,  0.00851   ,
        0.0367    ], dtype=float32)

In [18]: result['band']
Out[18]:
array(['I', 'J', 'H', 'K', 'AKARI09', 'AKARI18'],
      dtype='|S8')

ここでは、最後の列を文字列として保存したため、最後の 2 行の数値を変換する必要がある場合があります。

于 2013-06-21T20:05:03.160 に答える