Python 2.7 索引器:字符串索引超出范围python,numpy

Python 2.7 索引器:字符串索引超出范围python,numpy,python-2.7,numpy,Python 2.7,Numpy,我已经有很长一段时间了,我一直在扯我的头发。如果我运行一个输入文件 # 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

我已经有很长一段时间了,我一直在扯我的头发。如果我运行一个输入文件

# 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
代码正常工作。这两个示例都保存为.dat文件,系统会提示我将代码指向该文件

我已经花了24个小时试图解决这个问题(我知道,对吧?),但完全没有成功。我不能准确地指出我的问题。在这一点上,任何建议都将受到欢迎。一如既往地谢谢你

编辑:如果我将xranges(大约800行)更改为“range”,并向后扩展为append(请参见第792行和第798行),我现在将得到以下错误:

File 'myfile.py', line 807, in <module>
 if(data[i]=='#'): comments=comments+1
IndexError: list index out of range
文件'myfile.py',第807行,在
如果(数据[i]='#'):注释=注释+1
索引器:列表索引超出范围

我没有时间看完你的1000多行代码(我怀疑很多人会看完)。但从我所能看到的,你似乎在试图重新发明你阅读文件的方式。出现错误是因为某些列中的
数据
数组的类型/大小与您预期的不同

我建议你熟悉一下numpy的功能。您可能只需一次调用就可以获得所需格式的大部分文件数据。(代码中的所有打开调用似乎都是二进制的,因此我不知道文本文件是如何输入的。)我不知道您的格式是什么,但例如,您可以执行以下操作:

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

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

谢谢您的建议。这是其他人的代码,我正在尝试让它为多个数据文件工作。令人沮丧的。再次感谢。
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')