我需要打印一行
Device Size Calculated Status
我是这样做的
dev = "Device"
size = "Size"
calc = "Calculated"
stat = "Status"
print "%s%(15-x1)%s%(15-x2)%s%(15-x3)%s" % (dev, size, calc, stat)
x1 x2 x3然后是空格数。 但我得到一个错误:
File "<stdin>", line 1, in <module>
TypeError: format requires a mapping
如何编写此命令?
答案 0 :(得分:3)
比你想象的更简单:
print "%-15s %-15s %-15s %-15s" % (dev, size, calc, stat)
15
说“输出中此字符串的宽度必须为15个字符。” -
说:“如有必要,请在右侧填充空格。”如果没有-
,则值将填充在左侧。
答案 1 :(得分:3)
我会使用str.ljust
:
print "".join(map(lambda s: s.ljust(15), (dev, size, calc, stat)))
这样做的好处是列宽现在只在一个地方(尽管如果你以后决定它们的宽度不同,这可能不是一个优势!)
答案 2 :(得分:3)
你也可以像这样使用format
print "{1: <{0}}{2: <{0}}{3: <{0}}{4}".format(15, dev, size, calc, stat)
答案 3 :(得分:0)
老实说,我实施了你所说的话。这是我的代码。
import re
def myFormat(string):
for i in re.finditer(r"%([(][^)]*[)])", string):
string = re.sub(re.escape(i.group(0)), " "*eval(i.group(1)), string)
return string
dev, size, calc, stat = "Device", "Size", "Calculated", "Status"
x1, x2, x3 = 3, 6, 10
print myFormat("%s%(15-x1)%s%(15-x2)%s%(15-x3)%s")%(dev, size, calc, stat)
输出:
'Device Size Calculated Status'
更新:
为什么&#34; TypeError:format需要映射&#34;发生吗
Python允许编写表达式,如下所示。
print "%(something)d"%{"something":123}
print "%(something)s"%{"something":"abc"}
代码的一部分,即:
"%s%(15-x1)..."%(dev,...)
-------- --------
| ^
| |
+-------------+
Python interpreter expect {'15-x1':xxx, ...} here.
这是错误的原因。
因此,以下代码不会引发任何错误。但它的输出是无稽之谈。
"%s%(15-x1)%s%(15-x2)%s%(15-x3)%s"%{'15-x1':"abc", '15-x2':"def", '15-x3':"ghi"}
如果您在字符串中使用%(something)
并希望使用%
对其进行格式化,则需要使用dict
。否则会出现错误TypeError: format requires a mapping
。