Python を使用して、次のような形式のテキスト ファイルからデータを解析しようとしています。
<event>
A 0.8
B 0.4 0.3 -0.5 0.3
</event>
<event>
A 0.2
B 0.3 0.2 -0.5 0.8
C 0.1 0.3 -0.3 0.2
C -0.2 0.4 -0.1 0.9
</event>
<event>
A 0.4
B 0.4 0.3 -0.5 0.3
C 0.3 0.7 0.6 0.5
</event>
変数 A と B は常に各イベントに存在しますが、ご覧のとおり、C 変数は 1 つのイベントで最大 2 回発生する可能性があり、まったく発生しない場合もあります。全部で約10,000以上のイベントがあります。
このすべてをフォーマットして、各データを個別に呼び出すことができるようにしたいと思います (つまり、イベント 3 の変数 B の列 2) だけでなく、グループ (つまり、すべてのイベントの変数 A、列 0 をプロットする) でも、 C変数を繰り返すと、少しつまずきます。理想的には、C 変数 #1 と C 変数 #2 のデータの列が必要です。イベントに C 変数が 1 つまたは 0 つしかない場合、データは単純に 0 になります。
私のコードは現時点ではエレガントとはほど遠いものであり、出力形式は必要なものとはまったく異なります.
M = 10000 # number of events
file = open('data.txt')
a_lines = open('a.txt','w')
b_lines = open('b.txt','w')
c1_lines = open('c1.txt','w')
c2_lines = open('c2.txt','w')
c1 = []
c2 = []
for i in range(M):
for line in file:
if not line.strip():
continue
if line.startswith("</event>"):
break
elif line.startswith("<event>"):
a = file.next()
print >>a_lines,i,a
for i in range(M):
for line in file:
if line.startswith("B"):
print >>b_lines,i,line.strip()
nextline=file.next().strip()
c1.append(nextline)
nextline2=file.next().strip()
c2.append(nextline2)
break
# Parsing the duplicate C columns...
# I've formatted it so the 0 is aligned with the other data
for i in range(M):
if "C" in c1[i]:
print >>c1_lines, i, c1[i]
else:
print >>c1_lines, i, "C 0"
for i in range(M):
if "C" in c2[i]:
print >>c2_lines, i, c2[i]
else:
print >>c2_lines, i, "C 0"
# Sample variable formatting attempt:
b_event_num,b_0,b_1,b_2,b_3=loadtxt("b.txt",usecols=(0,1,2,3,4),unpack=True)
b_0=array(b_0)
b_1=array(b_1)
b_2=array(b_2)
b_3=array(b_3)
b_0=b_0.reshape((len(b_0)),1)
b_1=b_1.reshape((len(b_1)),1)
b_2=b_2.reshape((len(b_2)),1)
b_3=b_3.reshape((len(b_3)),1)
b_points=np.hstack((b_0,b_1,b_2,b_3))
抽出されたデータ自体は問題ないように見えますが、列に読み込もうとすると、次のエラーが発生します。理由はわかりません。
vals = [vals[i] for i in usecols]
IndexError: list index out of range
助けていただければ幸いです。ありがとう!