Python: Format output string, right alignment
我正在处理一个包含坐标x、y、z的文本文件
1 2 3 | 1 128 1298039 123388 0 2 .... |
每一行使用
1 | words = line.split() |
处理完数据后,我需要将坐标写回另一个txt文件中,以便每列中的项都右对齐(以及输入文件)。每一行都由坐标组成
1 | line_new = words[0] + ' ' + words[1] + ' ' words[2]. |
在C++中是否有任何类似EDCOX1、0等的机械手允许设置宽度和对齐方式?
使用更新的
1 | line_new = '{:>12} {:>12} {:>12}'.format(word[0], word[1], word[2]) |
下面介绍如何使用旧的
1 | line_new = '%12s %12s %12s' % (word[0], word[1], word[2]) |
您可以这样对齐它:
1 | print('{:>8} {:>8} {:>8}'.format(*words)) |
其中,
这里有一个证据:
1 2 3 4 5 6 | >>> for line in [[1, 128, 1298039], [123388, 0, 2]]: print('{:>8} {:>8} {:>8}'.format(*line)) 1 128 1298039 123388 0 2 |
ps.
可以通过使用
1 | line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10) |
我真的很喜欢Python3.6+中的一个新的文字字符串插值:
1 | line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}' |
参考:PEP 498——文字字符串插值
输出的简单表格:
1 2 3 4 | a = 0.3333333 b = 200/3 print("variable a variable b") print("%10.2f %10.2f" % (a, b)) |
输出:
1 2 | variable a variable b 0.33 66.67 |
%10.2f:10为最小长度,2为小数位数。
以下是使用"f-string"格式的另一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | print( f"{'Trades:':<15}{cnt:>10}", f" {'Wins:':<15}{wins:>10}", f" {'Losses:':<15}{losses:>10}", f" {'Breakeven:':<15}{evens:>10}", f" {'Win/Loss Ratio:':<15}{win_r:>10}", f" {'Mean Win:':<15}{mean_w:>10}", f" {'Mean Loss:':<15}{mean_l:>10}", f" {'Mean:':<15}{mean_trd:>10}", f" {'Std Dev:':<15}{sd:>10}", f" {'Max Loss:':<15}{max_l:>10}", f" {'Max Win:':<15}{max_w:>10}", f" {'Sharpe Ratio:':<15}{sharpe_r:>10}", ) |
这将提供以下输出:
1 2 3 4 5 6 7 8 9 10 11 12 | Trades: 2304 Wins: 1232 Losses: 1035 Breakeven: 37 Win/Loss Ratio: 1.19 Mean Win: 0.381 Mean Loss: -0.395 Mean: 0.026 Std Dev: 0.56 Max Loss: -3.406 Max Win: 4.09 Sharpe Ratio: 0.7395 |
您在这里所做的是说,第一列的长度为15个字符,左对齐,第二列(值)的长度为10个字符,右对齐。