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

Migration 将Python中格式良好的动态表格数据转换为str.format(),migration,python-3.x,python,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 |

我有以下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         
ValueError: Invalid conversion specification
这正是我想要的-数据的格式很好,并且在宽度为maxColumnWidth的列中居中。(maxColumnWidth在程序的前面计算)

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

headerRow = "|".join( ["{:^maxColumnWidth}".format(k) for k in headers] )
headerRow = "|".join( ["{:^maxColumnWidth}".format(k) for k in headers] )
但是,当我这样做时,我得到以下信息:

         Name          |        Date        |          Age         
ValueError: Invalid conversion specification
但是,如果我这样做:

headerRow = "|".join( ["{:^30}".format(k) for k in headers] )
一切正常。 我的问题是:如何在格式字符串中使用变量而不是整数?:

屈服

        Name        |        Date        |        Age         
  • 您可以将宽度
    maxColumnWidth
    表示为
    {m}
    ,然后 通过
    格式
    参数替换该值
  • 无需在
    连接中使用括号(列表理解)。A.
    生成器表达式(不带括号)就足够了

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

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

    我的问题是:我在这条线上做错了什么:“你得到了什么你不喜欢的东西?这是一个惊人的不同的问题。”。我无法理解从原来的问题到这个问题的跳跃。我很震惊。“为清晰起见编辑”为假。它被修改为完全不同。@S.Lott-这是因为我花了一段时间才弄清楚我真正想要的是什么。请注意,只有当生成器表达式是函数中使用的唯一参数时,它们才不需要括号。我认为,对于那些发现生成器的人来说,这可能是值得注意的,这样他们就不会犯在其他情况下忽略括号的错误,并想知道为什么它不起作用。