Python 格式字符串中的宽度变量

Rol*_*Bly 3 python string format

为了打印表格数据的标题,我想仅使用一种格式字符串line和一种列宽规格w1, w2, w3(或者即使w = x, y, z可能的话)。

我已经看过这个,但是tabulate等等,不要让我像那样证明专栏中的内容是合理format的。

这种方法有效:

head = 'eggs', 'bacon', 'spam'  
w1, w2, w3 = 8, 7, 10  # column widths  
line = '  {:{ul}>{w1}}  {:{ul}>{w2}}  {:{ul}>{w3}}'  
under = 3 * '='  
print line.format(*head, ul='', w1=w1, w2=w2, w3=w3)  
print line.format(*under, ul='=', w1=w1, w2=w2, w3=w3)  
Run Code Online (Sandbox Code Playgroud)

我必须在格式字符串中使用单独的名称作为 width {w1}, , ... 吗?{w2}尝试给出{w[1]}, {w[2]},KeyErrorkeyword can't be an expression

我也认为这w1=w1, w2=w2, w3=w3不是很简洁。有没有更好的办法?

Rub*_*Rub 7

如今,使用 f 字符串格式变得非常容易。

如果您正在使用

print(f'{token:10}')
Run Code Online (Sandbox Code Playgroud)

如果您希望 10 成为另一个变量(例如所有标记的最大长度),您可以编写

print(f'{token:{maxTokenLength}}')
Run Code Online (Sandbox Code Playgroud)

换句话说,将变量括在{}


在您的特定情况下,您所需要的就是这个。

head = 'eggs', 'bacon', 'spam'  
w1, w2, w3 = 8, 7, 10  # column widths  

print(f'  {head[0]:>{w1}}  {head[1]:>{w2}}  {head[2]:>{w3}}')
print(f'  {"="*w1:>{w1}}  {"="*w2:>{w2}}  {"="*w3:>{w3}}')
Run Code Online (Sandbox Code Playgroud)

哪个产生

      eggs    bacon        spam
  ========  =======  ==========
Run Code Online (Sandbox Code Playgroud)