在Python中将列表打印成固定宽度的字符串

时间:2014-10-16 08:49:44

标签: python string

使用以下列表“

In [3]: entr = [ 'ATOM', '1', 'P', 'C', 'B', '3', '42.564', '-34.232', '-7.330', '1.00', '105.08', 'P' ]

我想使用%创建一个固定宽度的字符串。但为什么这会失败? 这两行包含12个条目。

In [4]: buf = "%-6s%5d  %-4s%3s %1s%4d    %8.3f%8.3f%8.3f%6.2f%6.2f          %2s\n" % entr
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-6c71c289664e> in <module>()
----> 1 buf = "%-6s%5d  %-4s%3s %1s%4d    %8.3f%8.3f%8.3f%6.2f%6.2f          %2s\n" % entr

TypeError: not enough arguments for format string

5 个答案:

答案 0 :(得分:1)

好的我觉得你可以用这个:

entr = [ 'ATOM', '1', 'P', 'C', 'B', '3', '42.564', '-34.232', '-7.330', '1.00', '105.08', 'P' ]
buf = "{}-6s{}5d  {}-4s{}3s {}1s{}4d    {}8.3f{}8.3f{}8.3f{}6.2f{}6.2f          {}2s\n".format(*entr)
print buf

这样好吗?

答案 1 :(得分:1)

首先,您应该使用tuple格式化运算符%

"..." % tuple(entr)

其次,您应该使用%d来表示数字,而不是字符串!因此,您需要将此变量强制转换为number。这是一个简短的例子;

"...%s ... %d ... %f " %(entr[1], float(entr[2]), float(entr))

答案 2 :(得分:1)

1)%运算符需要tuple,你给list

2)列表中的所有项都是字符串,在格式化中,使用decimal和float说明符。您应该将列表中的项目转换为正确的类型。

答案 3 :(得分:1)

您的数据集字段都是字符串,您不能在其中使用数字格式。它们必须转换为数字类型,也要使用%-formatting参数必须是元组,而不是列表。

entr = ('ATOM', 1, 'P', 'C', 'B', 3, 42.564, -34.232, -7.330, 1.00, 105.08, 'P')

答案 4 :(得分:0)

使用.format运算符,您可以执行以下操作:

entr = [ 'ATOM', '1', 'P', 'C', 'B', '3', '42.564', '-34.232', '-7.330', '1.00', '105.08', 'P' ]

print(['{0: <6}'.format(str(x)) for x in entr])
['ATOM  ', '1     ', 'P     ', 'C     ', 'B     ', '3     ', '42.564', '-34.232', '-7.330', '1.00  ', '105.08', 'P     ']