2011-12-12 88 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) 
相關問題