2016-01-22 26 views
0

我想幾個循環內寫入一個文件中的數據。我遇到的困難是數據在時間上以行和列的形式發生變化。我所得到的是:文件的Python寫行與環

________________________________________________________ 
    f=25,0 | b=-25,0 | a=-30 | 
________________________________________________________ 
    d | Ka | Kah | th | Ko | 75/25| 50/50| Egb | 
________________________________________________________ 
-25,0 | 0,76 | 0,44 | 60 | 0,40 | 0,49| 0,58| 1,43| 
-17,0 | 0,37 | 0,25 | 46 | 0,40 | 0,39| 0,39| 2,61| 
-13,0 | 0,32 | 0,23 | 45 | 0,40 | 0,38| 0,36| 2,75| 
-8,0 | 0,27 | 0,22 | 44 | 0,40 | 0,37| 0,34| 2,90| 
    0,0 | 0,23 | 0,20 | 43 | 0,40 | 0,36| 0,32| 3,08| 
    8,0 | 0,20 | 0,19 | 42 | 0,40 | 0,35| 0,30| 3,27| 
13,0 | 0,19 | 0,18 | 41 | 0,40 | 0,35| 0,29| 3,49| 
17,0 | 0,18 | 0,18 | 41 | 0,40 | 0,35| 0,29| 3,49| 
25,0 | 0,17 | 0,17 | 40 | 0,40 | 0,34| 0,29| 3,73| 
________________________________________________________ 


________________________________________________________ 
    f=25,0 | b=-25,0 | a=-20 | 
________________________________________________________ 
    d | Ka | Kah | th | Ko | 75/25| 50/50| Egb | 
________________________________________________________ 
-25,0 | 0,80 | 0,57 | 70 | 0,45 | 0,54| 0,63| 1,00| 
-17,0 | 0,43 | 0,35 | 53 | 0,45 | 0,45| 0,44| 1,88| 
-13,0 | 0,38 | 0,32 | 51 | 0,45 | 0,43| 0,42| 2,05| 
-8,0 | 0,33 | 0,29 | 49 | 0,45 | 0,42| 0,39| 2,25| 
    0,0 | 0,29 | 0,27 | 48 | 0,45 | 0,41| 0,37| 2,36| 
    8,0 | 0,26 | 0,25 | 46 | 0,45 | 0,40| 0,35| 2,61| 
13,0 | 0,24 | 0,24 | 46 | 0,45 | 0,40| 0,35| 2,61| 
17,0 | 0,24 | 0,24 | 45 | 0,45 | 0,40| 0,34| 2,75| 
25,0 | 0,23 | 0,22 | 44 | 0,45 | 0,40| 0,34| 2,90| 
________________________________________________________ 

我想獲得的是:

_______________________________________________________________________________________________________________________________       
    f=25,0  |  b=-25,0                 
_______________________________________________________________________________________________________________________________ 
      a=-30             |  a=-20     
_______________________________________________________________________________________________________________________________       
    d | Ka | Kah | th | Ko | 75/25 | 50/50 | Egb | Ka | Kah | th | Ko | 75/25 | 50/50 | Egb | 
_______________________________________________________________________________________________________________________________       
-25,0 | 0,76 | 0,44 | 60 | 0,40 | 0,49 | 0,58 | 1,43 | 0,80 | 0,57 | 70 | 0,45| 0,54 | 0,63 | 1,00 | 
-17,0 | 0,37 | 0,25 | 46 | 0,40 | 0,39 | 0,39 | 2,61 | 0,43 | 0,35 | 53 | 0,45| 0,45 | 0,44 | 1,88 | 
-13,0 | 0,32 | 0,23 | 45 | 0,40 | 0,38 | 0,36 | 2,75 | 0,38 | 0,32 | 51 | 0,45| 0,43 | 0,42 | 2,05 | 
-8,0 | 0,27 | 0,22 | 44 | 0,40 | 0,37 | 0,34 | 2,90 | 0,33 | 0,29 | 49 | 0,45| 0,42 | 0,39 | 2,25 | 
    0,0 | 0,23 | 0,20 | 43 | 0,40 | 0,36 | 0,32 | 3,08 | 0,29 | 0,27 | 48 | 0,45| 0,41 | 0,37 | 2,36 | 
    8,0 | 0,20 | 0,19 | 42 | 0,40 | 0,35 | 0,30 | 3,27 | 0,26 | 0,25 | 46 | 0,45| 0,40 | 0,35 | 2,61 | 
13,0 | 0,19 | 0,18 | 41 | 0,40 | 0,35 | 0,29 | 3,49 | 0,24 | 0,24 | 46 | 0,45| 0,40 | 0,35 | 2,61 | 
17,0 | 0,18 | 0,18 | 41 | 0,40 | 0,35 | 0,29 | 3,49 | 0,24 | 0,24 | 45 | 0,45| 0,40 | 0,34 | 2,75 | 
25,0 | 0,17 | 0,17 | 40 | 0,40 | 0,34 | 0,29 | 3,73 | 0,23 | 0,22 | 44 | 0,45| 0,40 | 0,34 | 2,90 | 
_______________________________________________________________________________________________________________________________ 

這裏是我的代碼:

import numpy as np 
import math as m 
import csv 
file = open("test.txt", 'w') 
phi_list=[25.] 
alfa_list=[-30,-20,-10,0,10,20,30] 
b=0 
# 
for f in phi_list: 
    i = int(2*f/5+1) 
    print 'i =',i 
    bi = np.arange(-f,f+5,5) 
    beta = bi.tolist() 
    print "beta:", beta 
    d = np.arange(-f,f+5,f/3) 
    di = d.tolist() 
    print "di:", di 
    di.insert(1,-f/2) 
    print "di:", di 
    di.insert(5,f/2) 
    dk = sorted(di) 
    delta = [round(elem, 0) for elem in dk] 
    print "delta:", delta 
    for bo in beta: 
#  file.write("\n" + "\n" +'f=' +'%s'%f+ ' | ' +'b=' +'%s'%b + "\n") 
     if bo == f and bo > 0: 
      b = bo-0.01 
     elif b == f and bo < 0: 
      b = bo+0.01 
     for a in alfa_list: 
      file.write("\n" +"\n" +'____________________________________________________________________________________' +"\n") 
      file.write(' f=' +'%s'%f + ' | ' +' b=' +'%s'%(bo) + ' | ' +'a=' +'%s'%a + ' | ' +"\n") 
      file.write('____________________________________________________________________________________' +"\n") 
      file.write(' d ' + ' | ' + ' Ka '+ ' | ' + ' Kah'+ ' | ' + ' th '+ ' | '+ ' Ko '+ ' |'+ ' 75/25'+ '|'+ 
      ' 50/50'+ '| '+ ' Egb ' + '| '+ "\n") 
      file.write('____________________________________________________________________________________' +"\n") 
      for d in delta: 

       Ka=(csfa**2)/((csa**2)/(csad*csba)))**2) 
# 
       theta=round(f+m.degrees(m.atan(csfa/(snfa+m.sqrt((snfd*csab/(snfb*csad))))))) 

# 
       fo=1-abs(tna*tnb) 
       print "fo:", fo 
       K1=(snf)/(snf-snb*2)*csb*2 
       print "K1:", K1 
       tna1=m.sqrt(1/((1/K1))) 
       print "Tana1:", tna1  
       Ko=K1*fo*(1+tna1)/(1+tna1*tndo) 
       Ko5=0.5*Ko+0.5*Ka 
       Ko3=0.75*Ko+0.25*Ka 
       Kah=Ka*csad 
       Edb=1/(m.tan(m.radians(theta-f))) 
       file.write('{0:5.1f} {1:s} {2:.2f} {3:s} {4:.2f} {5:s} {6:4.0f} {7:s} {8:.2f} {9:s} {10:5.2f}{11:s} {12:5.2f}{13:s} {14:5.2f}{15:s} \n'.format(d, 
       '|', Ka,'|', Kah, '|', theta, '|', Ko, '|', Ko3, '|', Ko5,'|', Edb,'|')) 
      file.write('____________________________________________________________________________________' +"\n") 



file.close() 

我需要的是新的數據alpha將被添加到行中而不是下一列。我嘗試加入但沒有成功。任何建議或解決方案?

+0

您高度重視和使用CSV模塊。 –

+0

@Ali SAID OMAR:CSV是不是必須,但一個選項。我可以稍後在csv中反轉txt文件。該CSV有,因爲它可以通過Excel打開prons但它不是唯一的方法。 – GeMa

+0

其他提示:您可以通過整數乘串,重複。這意味着你可以使用'file.write('_'* 80)'。此外,避免使用'file'作爲變量名稱,因爲這會掩蓋內置函數。另外,你可以使用'str.format'來清楚地將你的渲染與你的變量分開:'{:^ 8} | {:^ 8}'。format('d','Ka')'。 –

回答

1

您正在循環播放a,並且在這些循環中,您正在使用換行符寫入文件,並在計算下一個文件之前先對第一個a執行所有計算。所以,毫不奇怪,你會一個接一個地寫出塊。

你應該做的是在alfa_listdelta反轉循環:事實上,d真的是你的行軸,併爲他們的每個值,寫入所有a值的所有數字。

提示:遍歷alfa_list時,只對列表的最後一個加換行符。您可以遵循使用寫入到文件for a_idx, a in enumerate(alfa_list):