2011-12-12 135 views
0

我写统筹到一个文本文件,样本数据集如下所示:的Python:写在文本文件中的特定位置

-11.700 8.827 9.247 
-11.956 8.450 7.858 
-12.511 9.655 7.129 
-13.527 10.173 7.584 

的统筹安排,X,Y, z分别。

我需要将X坐标写入文本文件,其中数字中的最后一位数字落在字符位置14处,Y坐标中的最后一位数字落在字符位置27处,最后一位数字位于第Z坐标落在位置40.

我能想到的唯一办法就是通过编号len来填充空格,但这看起来是一种“丑陋”的方式。有没有更优雅的解决方案?

回答

2

您可以使用格式化操作%此:

In [11]: x, y, z = -11.700, 8.827, 9.247 

In [12]: '%14.3f %12.3f %12.3f' % (x, y, z) 
Out[12]: '  -11.700  8.827  9.247' 
0

这并不难看。也许你可以通过引入一个帮助函数来获得更多的喜欢,它使用三个数字并返回格式化的字符串?您仍然需要添加间距等,但至少它与代码的其余部分是分开的,所以它不是内联的。

1

string.rjust()是你想要的。

line = ''.join([str(x).rjust(14), str(y).rjust(13), str(z).rjust(13)])

+0

AIX的字符串格式化方法可能更有效.... – 2011-12-12 17:18:06

0
In [1]: fout = open('output.txt', 'w') 

In [3]: for line in open('input.txt', 'r'): 
    ...:  x, y, z = [float(i) for i in line.split()] 
    ...:  fout.write('%14.3f %12.3f %12.3f\n' % (x, y, z)) 
    ...:  
    ...:  

In [4]: fout.close() 

In [5]: cat output.txt 
     -11.700  8.827  9.247 
     -11.956  8.450  7.858 
     -12.511  9.655  7.129 
     -13.527  10.173  7.584 
0

作为替代格式化操作%在其他的答案的建议,我想在str.format方法带来:

x, y, z = -11.700, 8.827, 9.247 
"{:14.3f} {:12.3f} {:12.3f}".format(x, y, z) 
相关问题