2012-02-27 56 views
3

所以我最近找到了這個問題的解決方案here 其中我想把兩列數據文件放到兩個數組中 我現在有這個代碼很好地完成這項工作。在Python中分割數據文件,第2輪

Xvals=[]; Yvals=[] 
i = open('BGBiasRE_IM3_wCSrescaled.txt','r') 

lines = [line.split() for line in i if line[:4] not in ('time', 'Step')] 
Xvals, Yvals = zip(*lines) 

V = [0, 0.004, 0, 0.0004] 

pylab.plot(Xvals, Yvals, marker='o') 
pylab.axis(V) 
pylab.xlabel('Time (ms)') 
pylab.ylabel('Current (A)') 
pylab.title('Title') 
pylab.show() 

但我現在意識到我搞砸了這個問題。我有一個數據文件,如下佈置,

time I(R_stkb) 
Step Information: Temp=0 (Run: 1/11) 

0.000000000000000e+000 0.000000e+000 

9.999999960041972e-012 8.924141e-012 

1.999999992008394e-011 9.623148e-012 

Step Information: Temp=10 (Run: 2/11) 

0.000000000000000e+000 0.000000e+000 

9.999999960041972e-012 4.924141e-012 

1.999999992008394e-011 8.623148e-012 

(注:各數據線之間沒有空行,和一個標籤的兩個數據值之間)

上面的代碼追加的所有步驟的信息進一個數組,所以當我爲兩個不同的步驟需要兩個不同的數組時,我得到兩個大的長數組,因此我可以稍後分別繪製它們各自的數組。我還必須得到步驟名稱,在這種情況下,Temp = 10並附加它/命名數組以反映每個步驟信息塊。例如。我想結束像這樣的陣列

Temp0_Xvals = [ 0.000000000000000e+000, 9.999999960041972e-012, 1.999999992008394e-011] 
Temp0_Yvals = [ 0.000000e+000, 8.924141e-012, 9.623148e-012] 

Temp10_Xvals = [...] 
Temp10_Yvals = [...] etc etc 

很明顯,這使得問題更加複雜,我不知道從哪裏開始。

回答

1

我會做一些沿着這些線路:

i = open('BGBiasRE_IM3_wCSrescaled.txt', 'r') 

Xnames, Ynames = [], [] 

count = 0 
for line in i: 
    if count > 0: 
     line_tmp = line.split() 
     if line_tmp[0] == 'Step': 
      step = (line_tmp[2].split('='))[1] 
      varnameX = 'Temp' + str(step) +'_Xvals' 
      varnameY = 'Temp' + str(step) +'_Yvals' 
      globals()[varnameX] = [] 
      globals()[varnameY] = [] 
      Xnames.append(varnameX) 
      Ynames.append(varnameY) 
     else: 
      globals()[varnameX].append(float(line_tmp[0])) 
      globals()[varnameY].append(float(line_tmp[1])) 
    count += 1 
i.close() 

for name in Xnames: 
    print name + ' = ' + str(eval(name)) 

for name in Ynames: 
    print name + ' = ' + str(eval(name)) 

這是肯定不是最有效的解決方案,但它適用於您的具體問題

+0

很好地工作。非常感謝。 – 2012-02-27 23:49:01

0

使用csvexcel_tab方言。