带有以下列表”
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
首先您应该给tuple
格式化操作符%
"..." % tuple(entr)
第二,您应该将%d
用于数字,而不是字符串!因此,您需要将此变量强制转换为number
。这是一个简短的例子;
"...%s ... %d ... %f " %(entr[1], float(entr[2]), float(entr))
好吧,我认为您可以使用此:
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] %
运算符期望一个tuple
,您给出一个list
。
2)列表中的所有项目都是字符串,在格式中,您使用十进制和浮点说明符。您应该将列表中的项目转换为正确的类型。
您的数据集字段都是字符串,您不能在其中使用数字格式。它们必须转换为数字类型,还必须使用%格式,参数必须是元组而不是列表。
entr = ('ATOM', 1, 'P', 'C', 'B', 3, 42.564, -34.232, -7.330, 1.00, 105.08, 'P')
使用.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 ']