如何打印变量之间的空格?

时间:2014-03-25 10:04:51

标签: python formatting syntax-error printf spaces

我需要打印一行

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

如何编写此命令?

4 个答案:

答案 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