问题:格式化输出字符串,右对齐
我正在处理一个包含坐标x,y,z的文本文件
1 128 1298039
123388 0 2
....
每行使用
words = line.split()
处理完数据后,我需要将坐标写回到另一个txt文件中,以使每一列中的项目(以及输入文件)都正确对齐。每行由坐标组成
line_new = words[0] + ' ' + words[1] + ' ' words[2].
std::setw()
C ++中是否有任何类似操纵器的控件可以设置宽度和对齐方式?
回答 0
使用更新的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])
回答 1
可以使用rjust
以下方法实现:
line_new = word[0].rjust(10) + word[1].rjust(10) + word[2].rjust(10)
回答 2
您可以像这样对齐它:
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
附言 *line
表示该line
列表将被解压缩,因此其.format(*line)
工作方式类似于.format(line[0], line[1], line[2])
(假设line
一个仅包含三个元素的列表)。
回答 3
我真的很喜欢Python 3.6+中的新文字字符串插值:
line_new = f'{word[0]:>12} {word[1]:>12} {word[2]:>12}'
回答 4
这是使用“ 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}",
)
这将提供以下输出:
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个字符,并且右对齐。
回答 5
输出的简单列表:
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是小数位数。
回答 6
要使用f字符串并控制尾随数字的数量,请执行以下操作:
print(f'A number -> {my_number:>20.5f}')
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。