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 更改为“范围”并扩展回附加(参见第 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某些列中的数组没有您期望的类型/大小。

我建议熟悉 numpy 的loadtxtgenfromtxt函数。您可能可以通过一次调用以您想要的格式获取大部分文件数据。(代码中的所有打开调用似乎都是二进制的,所以我不知道文本文件是如何输入的。)我不知道你的格式是什么,但例如你做这样的事情:

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')

在这里,我将最后一列保存为字符串,因此您可能需要转换最后两行中的数字。

于 2013-06-21T20:05:03.160 回答