格式化输出字符串,右对齐
- 2025-01-22 08:45:00
- admin 原创
- 84
问题描述:
我正在处理包含坐标 x, y, z 的文本文件
1 128 1298039
123388 0 2
....
每行被划分为 3 个项目,使用
words = line.split()
处理完数据后,我需要将坐标写回到另一个 txt 文件中,以便每列中的项目右对齐(以及输入文件)。每行都由坐标组成
line_new = words[0] + ' ' + words[1] + ' ' words[2].
C++ 中是否有类似的操作器std::setw()
可以设置宽度和对齐方式?
解决方案 1:
str.format
使用较新的语法尝试这种方法:
line_new = '{:>12} {:>12} {:>12}'.format(word[0], word[1], word[2])
下面是使用旧语法的方法%
(对于不支持的旧版本 Python 很有用str.format
):
line_new = '%12s %12s %12s' % (word[0], word[1], word[2])
解决方案 2:
以下是使用“f-string”格式进行格式化的另一种方法:
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}",
sep="
"
)
这将提供以下输出:
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 个字符并且右对齐。
如果您加入列表中的项目,并且想要格式化项目之间的空格,则可以使用“和常规格式化技术。
此示例用 3 个空格分隔每个数字。此处的关键字是f"{'':>3}"
print(f"{'':>3}".join(str(i) for i in range(1, 11)))
输出:
1 2 3 4 5 6 7 8 9 10
解决方案 3:
您可以像这样对齐:
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.*line
表示line
列表将被解包,因此.format(*line)
其工作原理类似于.format(line[0], line[1], line[2])
(假设line
是一个只有三个元素的列表)。
解决方案 4:
可以通过以下方式实现rjust
:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
解决方案 5:
我真的很喜欢 Python 3.6+ 中的新文字字符串插值:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
参考:PEP 498——文字字符串插值
解决方案 6:
通过使用 f 字符串并控制尾随数字的数量来实现:
print(f'A number -> {my_number:>20.5f}')
解决方案 7:
输出的简单列表:
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 为小数位数。
解决方案 8:
将 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(
... '
Trades ' + cnt.rjust(rpad),
... '
Wins ' + wins.rjust(rpad),
... '
Losses ' + losses.rjust(rpad),
... '
Breakeven ' + evens.rjust(rpad),
... '
Win/Loss Ratio ' + win_r.rjust(rpad),
... '
Mean Win ' + mean_w.rjust(rpad),
... '
Mean Loss ' + mean_l.rjust(rpad),
... '
Mean ' + mean_trd.rjust(rpad),
... '
Std Dev ' + sd.rjust(rpad),
... '
Max Loss ' + max_l.rjust(rpad),
... '
Max Win ' + max_w.rjust(rpad),
... '
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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD