2016-04-06 14 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)) 
関連する問題