私は 2 つのファイルを持っています。1 つは ID 番号だけで、もう 1 つはそれらの ID 番号とそれに対応する値 (統計情報) の一部です。数字が両方のファイルにあるかどうかを確認し、大きなファイルから数字と値を出力するスクリプトがあります。残念ながら、現在のスクリプトでは、「範囲外」であることに気付いたときにエラーが発生します。さらに、スクリプトの後半で、値が存在しない (値ファイルにない) ため、ゼロで除算しようとします。私のスクリプトの関連する側面は次のとおりです。
for j in range(len(data)/22):
if(data[1+j*22][3]==stars[i][0]):
name=str(data[1+j*22][1])
dust=str(data[2+j*22][20])
私はこれを試してみましたが成功しませんでした:
for j in range(len(data)/22):
if(data[1+j*22][3]!=stars[i][0]):
print 'not available'
elif(data[1+j*22][3]==stars[i][0]):
name=str(data[1+j*22][1])
dust=str(data[2+j*22][20])
これも:
for j in range(len(data)/22):
if(data[1+j*22][3]!=stars[i][0]):
break
elif(data[1+j*22][3]==stars[i][0]):
name=str(data[1+j*22][1])
dust=str(data[2+j*22][20])
そして最後に、ゼロで除算しようとするところです。
print Temp
Teff=round(sum(Temp/chi)/sum(1/chi),0)
Tempin=round(sum(Tin/chi)/sum(1/chi),0)
tau=round(sum(Tau/chi)/sum(1/chi),5)
luminosity=round(sum(Luminosity/chi)/sum(1/chi),0)
Massloss=round(sum(Mdot/chi)/sum(1/chi),3)
Chi=round(sum(chi)/len(chi),2)
私の「カイ」値が問題を引き起こしているところです(スクリプトで定義されています)。
これが私が得ているエラーです
if(data[1+j*22][3]!=stars[i][0]):
IndexError: list index out of range
初期データ範囲を修正できれば、カイ値がゼロになることを心配する必要はないと思います。私の問題をより明確にすることを期待して、私はそれについて言及しただけです。
トリミングされたコード:
import numpy as np
import sys
import StringIO
#Read in the stars that will be selected from the set of models
#SCRIPT='/SAH/SAH5/user/Results/b3results/b3Over'
SCRIPT=raw_input('Star List file: Ex. /SAH/SAH5/user/Modeling/TestStars\n')
stars=[]
f=open(SCRIPT,"rb") #Fill in the SCRIPT variable
for line in f:
s=line.split()
stars.append(s)
f.close()
#Read in the Models
#SCRIPTM='/SAH/SAH5/user/Results/b3/Filtered/NewModels'
SCRIPTM=raw_input('Uttenthaler output file: Ex. /SAH/SAH5/user/Modeling/chisquaretests/stars3\n')
data=[]
d=open(SCRIPTM,"rb") #Fill in the SCRIPT variable
for line in d:
if not line.strip():
continue
else:
s=line.split()
data.append(s)
d.close()
NewResults=''
for i in range(len(stars)):
print stars[i][0]
chi=np.array([])
Temp=np.array([])
Tin=np.array([])
Tau=np.array([])
Luminosity=np.array([])
Mdot=np.array([])
#print len(data)
for j in range(len(data)/22):
if(data[1+j*22][3]==stars[i][0]):
name=str(data[1+j*22][1])
dust=str(data[2+j*22][20])
#print data[2+j*22][4]
chi=np.append(chi,float(data[2+j*22][4]))
chi=np.append(chi,float(data[3+j*22][4]))
chi=np.append(chi,float(data[4+j*22][4]))
chi=np.append(chi,float(data[5+j*22][4]))
chi=np.append(chi,float(data[6+j*22][4]))
print Temp
Teff=round(sum(Temp/chi)/sum(1/chi),0)
Tempin=round(sum(Tin/chi)/sum(1/chi),0)
tau=round(sum(Tau/chi)/sum(1/chi),5)
luminosity=round(sum(Luminosity/chi)/sum(1/chi),0)
Massloss=round(sum(Mdot/chi)/sum(1/chi),3)
Chi=round(sum(chi)/len(chi),2)
NewResults=NewResults+str(int(stars[i][0]))+'\t'+name+'\t'+str(Teff)+'\t'+str(Tempin)+'\t'+dust+'\t'+str(tau)+'\t'+str(luminosity)+'\t'+str(Massloss)+'\t'+str(Chi)+'\n'
print NewResults
これは私の star3 ファイルです。これは、他のファイルの整数値の 1 つのデータの「チャンク」です。ここでは、'Name' 行にあります: '6973'。TestStars は、6239、7010 などの数字の 1 つの列です。コンマはなく、純粋な整数のみです。