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

如何在python中沿小数点对齐正值和负值,python,python-2.7,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      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 ))
发出

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
假设我有:

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

格式中的第一个数字是字符总数,而不是小数点前的数字。当该数字太小时,它会通过删除所有填充来进行补偿。要获得所需内容,您需要使用
%10.6f
,而不是
%2.6f
-
是1,初始数字是2,小数点是1,小数点后是6位-1+2+1+6=10。

第一列数据实际上是字符串?我想这里已经发布了一个类似的问题。谢谢你的回答。不管怎样,我的所有值都是浮动变量。在我的程序中,我在for循环中包含了f.write()。是否可以在不再次读取的情况下将for循环中的数字对齐?关键部件是其中包含
.format
的两行。只需将它们放入
for
循环中即可。将
print
替换为
f。写入
并将
\n
添加到结尾谢谢你,我会尝试的。我是python新手