2009-09-09 47 views
33

我有一些数据显示为3列格式,格式如下:如何正确对齐数字数据?

key: value key: <tab> key: value <tab> key: value

下面是一个例子:

p: 1 sl: 10 afy: 4 
q: 12 lg: 10 kla: 3 
r: 0 kl: 10 klw: 3 
s: 67 vw: 9 jes: 3 
t: 16 uw: 9 skw: 3 
u: 47 ug: 9 mjl: 3 
v: 37 mj: 8 lza: 3 
w: 119 fv: 8 fxg: 3 
x: 16 fl: 8 aew: 3 

不过,我想如果数字都是右对齐,如:

a: 1 
b: 12 
c: 123 

我怎样才能做到这一点在Python?

下面是现有打印代码我有:

print(str(chr(i+ord('a'))) + ": " + str(singleArray[i]) + "\t" + 
    str(doubleArray[i][0]) + ": " + str(doubleArray[i][1]) + "\t" + 
    str(tripleArray[i][0]) + ": " + str(tripleArray[i][1])) 

回答

33

在Python 2.5使用rjust(对字符串)。此外,尝试在python中使用string formatting而不是仅仅连接字符串。对于rjust和字符串格式化下面简单的例子:

width = 10 
str_number = str(ord('a')) 
print 'a%s' % (str_number.rjust(width)) 
2

如果你知道AA上限为你的号码,你可以用"%<lenght>d" % n格式化。鉴于所有这些计算完成,并在(焦炭,NUM)的列表:

mapping = ((chr(i+ord('a')), singleArray[i]), 
      (doubleArray[i][0],doubleArray[i][1]), 
      (tripleArray[i][0],tripleArray[i][1]) 
      ) 
for row in mapping: 
    print "%s: %3d" % row 
25

使用Python字符串格式化:'%widths'其中宽度是整数

>>> '%10s' % 10 
'  10' 
>>> '%10s' % 100000 
' 100000' 
+17

对于左对齐使用'%-10s'(只是增加这个,因为它是左对齐的谷歌最高结果) – Mark 2012-06-08 12:47:41

72

在蟒蛇2.6+(和它的标准方法在3)中,字符串格式化的“首选”方法是使用string.format()(完整的文档可以找到here)。 右对齐可以

"a string {0:>5}".format(foo) 

来完成,这将使用5个地方,但是

"a string {0:>{1}}".format(foo, width) 

也是有效的,并会使用值宽度传递给.format()。

+1

我不知道为什么这个答案因为不正确而被投票决定 - 对于右对齐/有必要使用'“{:> 5}”',其中'>'表示右对齐(字符串的默认值是“<”或左对齐)。幸运的是,链接的文档清楚地表明了这一点。 (编辑:没关系,我只是修复答案,留下这个参考。) – Pat 2012-09-26 02:21:56

+6

它已被upvoted,因为“>”是数字的'对齐'字段的默认值,而问题是关于数字。不过,你说得对,明确表示更好。 – 2012-09-27 00:33:56

+1

Mea culpa。我发现这个问题是因为我试图对齐字符串,并且我没有仔细阅读OP问题,以至于没有发现只有数字正在被打印。感谢澄清。 – Pat 2012-09-29 05:51:00

3

在Python 3.6,你可以使用Literal String Interpolation,这是少 冗长,可能更为直观的​​使用:

width = 5 
number = 123 
print (f'{number:>{width}}') 

或者只是:

number = 123 
print (f'{number:>5}') 

它重用许多str.format()语法。

我想/希望这将是未来的首选方式。

+0

GitHub:[使用f-strings风格文字字符串插值而不使用Python 3.6](https://github.com/damnever/fmt) – 2017-02-13 20:54:22