2013-06-21 3 views
0

Имейте длинный code, что я срывал волосы. Если я запускаю входной файлIndexError: string index out of range python, 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 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 часа (я знаю, верно?) Без особого успеха. Я не могу определить свою проблему. ЛЮБОЙ совет будет приветствоваться на этом этапе. Спасибо, как всегда!

EDIT: если я поменяю (около 800 линии) в xranges до «Диапазон» и распространяется назад, чтобы добавить (см строки 792 и 798) Теперь я получаю эту ошибку:

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

ответ

1

Я DON» у меня есть время, чтобы следовать через 1000 строк вашего кода (и я сомневаюсь во многих случаях). Но из того, что я мог заглянуть, вы, кажется, пытаетесь изобрести колесо так, как вы читаете ваши файлы. Вы получаете ошибку, потому что ваш массив data в некоторых столбцах не имеет типа/размера, который вы ожидаете.

Я предлагаю ознакомиться с функциями loadtxt numpy или genfromtxt. Вероятно, вы можете получить большую часть данных файла в формате, который вы хотите, с помощью одного вызова. (Все открытые вызовы в вашем коде кажутся двоичными, поэтому я не знаю, как входит текстовый файл.) Я точно не знаю, что такое ваш формат, но, например, вы делаете что-то вроде этого:

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

Здесь я сохранил последний столбец как строку, так что вы, возможно, придется преобразовать числа в двух последних строках.

+0

Спасибо за совет. Это чужой код, и я пытаюсь заставить его работать для нескольких файлов данных. Разочарование. Еще раз спасибо. – Matt