我想使用以下代码以特定格式将某些文本写入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
提前致谢!
答案 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))