2016-04-06 102 views
1

我想寫在一定格式的某些文本,此代碼爲TXT:如何在Python中將numpy數組成員的值寫入txt?

textf = open("output.txt","w") 

for i in range(len(x1)): 
    textf.write("sf"+repr(i+2) +": -1x1_1+"+ repr((x2[i]))+"x2_1+"+repr(x3[i])+"x3_1") 
    textf.write("\n") 

    textf.close() 

的輸出是這樣的:

sf2: -1x1_1+array([ 100.])x2_1+array([ 100.])x3_1 
sf3: -1x1_1+array([ 91.02295278])x2_1+array([ 90.9906232])x3_1 
sf4: -1x1_1+array([ 101.25508941])x2_1+array([ 138.07783278])x3_1 

但我想看看在陣列中只有值:

sf2: -1x1_1+100x2_1+100x3_1 
sf3: -1x1_1+91.02295278x2_1+90.9906232x3_1 
sf4: -1x1_1+101.25508941x2_1+138.07783278x3_1 

在此先感謝!

回答

1

repr()會給你一個對象的表示。對於簡單的對象,例如整數和浮點數,這將是字面值,但對於所有內容來說並非如此。你在這裏想要的是使用string interpolation中的數組值。還建議使用with語法處理文件。

with open("output.txt","w") as textf: 
    for i in range(len(x1)): 
     textf.write('sf{0}: -1x1_1+{1:f}x_1+{2:f}x3_1\n'.format(i+2, x2[i], x3[i])) 

通過在格式中添加更多數字,例如, {:5.3f}您可以控制浮動將佔用的最大寬度,並顯示小數點後的位數。例如,

​​

並與零填充的空間向左:

>>> '{:010.5f}'.format(3.25) 
'0003.25000' 

最後,如果你有很多行寫的,叫write()反覆可能會很慢。首先創建所有行的字符串,然後一次寫入它們會更有效率。

lines = ['sf{0}: -1x1_1+{1:f}x_1+{2:f}x3_1'.format(i+2, x2[i], x3[i]) for i in range(len(x1))] 
with open("output.txt","w") as textf: 
    textf.write('\n'.join(lines)) 
相關問題