Python 格式化输出字符串,右对齐
我正在处理一个包含坐标x,y,z的文本文件Python 格式化输出字符串,右对齐,python,alignment,string-formatting,Python,Alignment,String Formatting,我正在处理一个包含坐标x,y,z的文本文件 1 128 1298039 123388 0 2 .... 每行使用分隔符分隔为3个项目 words = line.split() 处理完数据后,我需要将坐标写回另一个txt文件中,以便每列中的项目都正确对齐(以及输入文件)。每条线都由坐标组成 line_new = words[0] + ' ' + words[1] + ' ' words[2]. 有任何机械手,如代码> STD::SET
1 128 1298039
123388 0 2
....
每行使用分隔符分隔为3个项目
words = line.split()
处理完数据后,我需要将坐标写回另一个txt文件中,以便每列中的项目都正确对齐(以及输入文件)。每条线都由坐标组成
line_new = words[0] + ' ' + words[1] + ' ' words[2].
有任何机械手,如代码> STD::SETWWER(/CUT>)等,允许在C++中设置宽度和对齐方式?
< P>使用新的方法:< /P>尝试此方法。 下面介绍如何使用旧的%
语法(对于不支持str.format
的旧版本Python非常有用):
可以通过使用
rjust
:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
您可以这样对齐它:
print('{:>8} {:>8} {:>8}'.format(*words))
其中,
表示“向右对齐”8
是特定值的宽度
这里有一个证据:
>>> for line in [[1, 128, 1298039], [123388, 0, 2]]:
print('{:>8} {:>8} {:>8}'.format(*line))
1 128 1298039
123388 0 2
Ps.
*行
意味着行
列表将被解包,因此.format(*line)
的工作原理类似于.format(行[0],行[1],行[2])
(假设行
是一个只有三个元素的列表)。输出的简单列表:
a = 0.3333333
b = 200/3
print("variable a variable b")
print("%10.2f %10.2f" % (a, b))
输出:
variable a variable b
0.33 66.67
%10.2f:10是最小长度,2是小数位数。我非常喜欢Python 3.6+中新的文本字符串插值:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
参考资料:以下是使用“f-string”格式的另一种方式:
print(
f"{'Trades:':<15}{cnt:>10}",
f"\n{'Wins:':<15}{wins:>10}",
f"\n{'Losses:':<15}{losses:>10}",
f"\n{'Breakeven:':<15}{evens:>10}",
f"\n{'Win/Loss Ratio:':<15}{win_r:>10}",
f"\n{'Mean Win:':<15}{mean_w:>10}",
f"\n{'Mean Loss:':<15}{mean_l:>10}",
f"\n{'Mean:':<15}{mean_trd:>10}",
f"\n{'Std Dev:':<15}{sd:>10}",
f"\n{'Max Loss:':<15}{max_l:>10}",
f"\n{'Max Win:':<15}{max_w:>10}",
f"\n{'Sharpe Ratio:':<15}{sharpe_r:>10}",
)
这里您要做的是,第一列长度为15个字符,左对齐,第二列(值)长度为10个字符,右对齐。要使用f字符串并控制尾随数字的数量,请执行以下操作:
print(f'A number -> {my_number:>20.5f}')
将Vlad的优秀内容与其他内容混合在一起,代码也可以编写为可读性和易用性,如
>>> cnt = wins = losses = str( 2)
>>> evens = win_r = mean_w = str( 14)
>>> mean_l = mean_trd = sd = str( 336)
>>> max_l = max_w = sharpe_r = str(4278)
>>>
>>> rpad = 10
>>>
>>> print(
... '\n Trades ' + cnt.rjust(rpad),
... '\n Wins ' + wins.rjust(rpad),
... '\n Losses ' + losses.rjust(rpad),
... '\n Breakeven ' + evens.rjust(rpad),
... '\n Win/Loss Ratio ' + win_r.rjust(rpad),
... '\n Mean Win ' + mean_w.rjust(rpad),
... '\n Mean Loss ' + mean_l.rjust(rpad),
... '\n Mean ' + mean_trd.rjust(rpad),
... '\n Std Dev ' + sd.rjust(rpad),
... '\n Max Loss ' + max_l.rjust(rpad),
... '\n Max Win ' + max_w.rjust(rpad),
... '\n Sharpe Ratio ' + sharpe_r.rjust(rpad),
... )
Trades 2
Wins 2
Losses 2
Breakeven 14
Win/Loss Ratio 14
Mean Win 14
Mean Loss 336
Mean 336
Std Dev 336
Max Loss 4278
Max Win 4278
Sharpe Ratio 4278
注意“旧”语法是如何更简洁、更容易阅读和更短的。我想我应该添加一个比提供的更直接的链接:当然更短,我不知道cleaner真正的意思,但“更容易阅读”只是因为我觉得它很熟悉。如果您还不熟悉其中一种格式,那么新格式似乎更容易阅读。字符串格式的“.format”显然比百分比/模更直观。右对齐的右箭头看起来也很直观。@标记一种方法旧方法更干净,它使用的字符更少。是的,随着熟悉程度的提高,新方法变得直观,但它并不干净和简单。对于那些习惯于通过古老的C语言(一种堪称典范的简洁和精确的语言)向我们介绍语法的人来说,旧方法更直观。新方法有什么先例?@StephenBoston我将把可读性留给专家,但新方法绝对更干净。参数不再是可选的。%可能会与数学运算符混淆(虽然在上下文中不太可能,但乍一看是肯定的)。如果字[n]不是预期的类型(本例中为字符串),则旧方法将失败。新方法不需要知道传入的类型是什么,它总是有效的。干净简单。平心而论,我从来没有对printf样式感到满意过(我主要是用cout编写C)。有没有办法参数化格式的宽度?在本例中,如果决定将格式更改为20和15宽度,则需要更改多行
widths=[15,10]
f“{'Trades:':width[1]},
我想实现上述目标。明白了!也许有人会觉得这很有帮助。我还需要一个嵌套的括号,所以:f“{'Trades:':{width[1]}}”
有时候最好的答案是那些没有回答确切问题的答案。谢谢你!:)@完全正确!我也希望格式化字符串文本。我总是忘了“字符串中的字符串”的用法(即使用“''`inside```)。
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
print(f'A number -> {my_number:>20.5f}')
>>> cnt = wins = losses = str( 2)
>>> evens = win_r = mean_w = str( 14)
>>> mean_l = mean_trd = sd = str( 336)
>>> max_l = max_w = sharpe_r = str(4278)
>>>
>>> rpad = 10
>>>
>>> print(
... '\n Trades ' + cnt.rjust(rpad),
... '\n Wins ' + wins.rjust(rpad),
... '\n Losses ' + losses.rjust(rpad),
... '\n Breakeven ' + evens.rjust(rpad),
... '\n Win/Loss Ratio ' + win_r.rjust(rpad),
... '\n Mean Win ' + mean_w.rjust(rpad),
... '\n Mean Loss ' + mean_l.rjust(rpad),
... '\n Mean ' + mean_trd.rjust(rpad),
... '\n Std Dev ' + sd.rjust(rpad),
... '\n Max Loss ' + max_l.rjust(rpad),
... '\n Max Win ' + max_w.rjust(rpad),
... '\n Sharpe Ratio ' + sharpe_r.rjust(rpad),
... )
Trades 2
Wins 2
Losses 2
Breakeven 14
Win/Loss Ratio 14
Mean Win 14
Mean Loss 336
Mean 336
Std Dev 336
Max Loss 4278
Max Win 4278
Sharpe Ratio 4278