我正在编写一个文本文件的坐标,示例数据集如下所示:
-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
并相应地填充空间,但这似乎是一种“丑陋”的方式。有更优雅的解决方案吗?
答案 0 :(得分: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'
答案 1 :(得分:1)
string.rjust()
就是你想要的。
line = ''.join([str(x).rjust(14), str(y).rjust(13), str(z).rjust(13)])
答案 2 :(得分:0)
那并不难看。也许你可以通过引入一个辅助函数来获得更多的东西,这个函数接受三个数字并返回格式化的字符串?您仍然需要添加间距等,但至少它与代码的其余部分分开,因此它不是内联的。
答案 3 :(得分: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
答案 4 :(得分:0)
作为其他答案中建议的格式化运算符%
的替代方法,我想引入str.format
方法:
x, y, z = -11.700, 8.827, 9.247
"{:14.3f} {:12.3f} {:12.3f}".format(x, y, z)