我想将一堆正值和负值写入文本文件,如下所示
1 12.203026 2.291063 -0.061603
1 -0.736147 1.353548 -1.347932
6 0.728048 1.348907 0.247566
6 -0.728048 1.348907 -10.247565
1 10.736147 1.353547 1.347932
1 -1.203026 12.291063 0.061604
6 11.583889 0.179143 -10.258947
当我写作时,它应该如上所述沿小数点对齐。我使用以下f.write()命令编写的代码,如下所示。
f.write('%s %2.6f %2.6f %2.6f\n' % (a, x, y, z ))
out put
1 12.203026 2.291063 -0.061603
1 -0.736147 1.353548 -1.347932
6 0.728048 1.348907 0.247566
6 -0.728048 1.348907 -10.247565
1 10.736147 1.353547 1.347932
1 -1.203026 12.291063 0.061604
6 11.583889 0.179143 -10.258947
答案 0 :(得分:9)
格式中的第一个数字是字符总数,而不是小数点前的数字。当该数字太小时,它会通过丢弃所有填充来补偿。要获得所需内容,您需要使用%10.6f
,而不是%2.6f
。 -
为1,初始数字为2,小数点为1,小数点后为6位 - 1 + 2 + 1 + 6 = 10.
答案 1 :(得分:2)
假设我有:
>>> li=[['1', 12.203026, 2.291063, -0.061603], ['1', -0.736147, 1.353548, -1.347932], ['6', 0.728048, 1.348907, 0.247566], ['6', -0.728048, 1.348907, -10.247565], ['1', 10.736147, 1.353547, 1.347932], ['1', -1.203026, 12.291063, 0.061604], ['6', 11.583889, 0.179143, -10.258947]]
您可以分两步对齐固定的字段宽度:
for a,x,y,z in li:
x1, y1, z1=['{:2.6f}'.format(e) for e in (x,y,z)]
print '{} {:>13} {:>13} {:>13}'.format(a, x1, y1, z1 )
打印:
1 12.203026 2.291063 -0.061603
1 -0.736147 1.353548 -1.347932
6 0.728048 1.348907 0.247566
6 -0.728048 1.348907 -10.247565
1 10.736147 1.353547 1.347932
1 -1.203026 12.291063 0.061604
6 11.583889 0.179143 -10.258947
如果要在一个地方指定宽度和精度,可以执行以下操作:
'{} {:{w}.{p}f} {:{w}.{p}f} {:{w}.{p}f}'.format(a, x, y, z, w=13, p=6 )