Python string replacement_field中是否允许使用int变量?

时间:2016-07-27 17:31:34

标签: python-3.x string-formatting

我正在尝试将str.format()用于具有可变宽度的报表标题(即列),但我似乎无法使用int变量来执行此操作:

hlist =['h1','h2','h3','h4']
width = 7

for i in range(len(hlist)):
    # print(hlist[i].center(width), end='  ')       # this works
    print('{:^width}'.format(hlist[i]), end='  ')   # this doesn't
print()

for i in range(len(hlist)):
    # print('------'.center(width), end='  ')       # this works
    print('{:-<width}'.format('-'), end='  ')       # this doesn't
print()

运行此代码会给我:

ValueError: Invalid format specifier

使用任何int字面值代替width都可以。我研究了here,我认为我已经接近了format_spec arg,但看起来它只支持非整数格式。我也尝试了int(),但没有运气。

我对使用byte.center()的解决方案感到满意,但我正在寻找一种方法来利用更新的语法以获得更大的灵活性。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您必须将宽度作为变量传递给format函数,并让它知道您需要一个名为width的变量,而不是文字字符串。由于大括号可以嵌套,请执行以下操作:

hlist =['h1','h2','h3','h4']
width = 7

for i in range(len(hlist)):
    print('{:^{width}}'.format(hlist[i], width=width), end='  ')
print()

for i in range(len(hlist)):
    print('{:-<{width}}'.format('-', width=width), end='  ')
print()