如何在python中将numpy数组成员的值写入txt?

时间:2016-04-06 22:58:42

标签: python arrays string 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 个答案:

答案 0 :(得分: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}您可以控制浮点数占用的最大宽度以及小数点后显示的位数。例如,

>>> '{:10.5f}'.format(3.25)
'   3.25000'

用零填充左边的空格:

>>> '{: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))