2

私は 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 つの列です。コンマはなく、純粋な整数のみです。

4

1 に答える 1