如何在python中沿小数点对齐正负值

时间:2015-03-11 01:38:53

标签: python python-2.7

我想将一堆正值和负值写入文本文件,如下所示

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

2 个答案:

答案 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 )