将Python中动态,格式良好的表格数据转换为str.format()

时间:2011-09-23 21:52:17

标签: migration python-3.x python

我有以下Python 2.x代码,它为表格数据生成标题行:

headers = ['Name', 'Date', 'Age']
maxColumnWidth = 20 # this is just a placeholder
headerRow = "|".join( ["%s" % k.center(maxColumnWidth) for k in headers] )
print(headerRow)

此代码输出以下内容:

         Name          |        Date        |          Age         

这正是我想要的 - 数据格式良好,并以宽度 maxColumnWidth 的列为中心。 (maxColumnWidth在程序的早期计算)

根据the Python docs,您应该可以在Python3中使用大括号字符串格式执行相同的操作,如下所示:

headerRow = "|".join( ["{:^maxColumnWidth}".format(k) for k in headers] )

然而,当我这样做时,我得到以下内容:

ValueError: Invalid conversion specification

但是,如果我这样做:

headerRow = "|".join( ["{:^30}".format(k) for k in headers] )

一切正常。 我的问题是:如何在格式字符串中使用变量而不是整数?:

headerRow = "|".join( ["{:^maxColumnWidth}".format(k) for k in headers] )

2 个答案:

答案 0 :(得分:4)

headers = ['Name', 'Date', 'Age']
maxColumnWidth=21
headerRow = "|".join( "{k:^{m}}".format(k=k,m=maxColumnWidth) for k in headers )
print(headerRow)

产量

        Name        |        Date        |        Age         
  1. 您可以将宽度maxColumnWidth表示为{m},然后 通过format参数替换该值。
  2. 无需在join内使用括号(列表理解)。一个 生成器表达式(没有括号)就足够了。

答案 1 :(得分:3)

正如它所说,您的转换规范无效。 “maxColumnWidth”不是有效的转换规范。

>>> "{:^{maxColumnWidth}}".format('foo', maxColumnWidth=10)
'   foo    '