如何右对齐数字数据?

时间:2009-09-09 20:56:57

标签: python string text formatting

我有一些数据以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]))

5 个答案:

答案 0 :(得分:75)

在python 2.6+(它是3中的标准方法)中,字符串格式化的“首选”方法是使用string.format()(可以找到完整的文档here)。 正确的理由可以用

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

这将使用5个位置,但是

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

也有效,将使用传递给.format()的值width。

答案 1 :(得分:34)

在Python 2.5中使用rjust(在字符串上)。另外,尝试习惯python中的string formatting而不是仅仅连接字符串。以下是rjust和字符串格式的简单示例:

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

答案 2 :(得分:25)

使用python字符串格式:'%widths'其中width是一个整数

>>> '%10s' % 10
'        10'
>>> '%10s' % 100000
'    100000'

答案 3 :(得分:3)

在Python 3.6中,你可以使用Literal String Interpolation,这是更少 详细而且可能更直观易用:

int b=0;
while(b<=888) {
b++;
}

或者只是:

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

它重用了number = 123 print (f'{number:>5}') 语法的大部分内容。

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

答案 4 :(得分:2)

如果您知道数字的上限,则可以使用"%<lenght>d" % n格式化。鉴于所有这些计算都在(char,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