python:格式化输出字符串,右对齐

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等的机械手允许设置宽度和对齐方式?


使用更新的str.format语法尝试此方法:

1
line_new = '{:>12}  {:>12}  {:>12}'.format(word[0], word[1], word[2])

下面介绍如何使用旧的%语法(对于不支持str.format的旧版本python很有用):

1
line_new = '%12s  %12s  %12s' % (word[0], word[1], word[2])


您可以这样对齐它:

1
print('{:>8} {:>8} {:>8}'.format(*words))

其中,>表示"右对齐",8表示特定值的宽度。

这里有一个证据:

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.*line表示将解包line列表,因此.format(*line)的工作方式与.format(line[0], line[1], line[2])类似(假设line是一个只有三个元素的列表)。


可以通过使用rjust来实现:

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个字符,右对齐。