与python打印/写入功能的水平对齐?

时间:2019-09-17 08:42:18

标签: python formatting pretty-print

我经常需要水平对齐的打印列表,字典等(类似于MS-Word中的制表符,但不是 \t字符)。

实现它的功能并不难。例如

def printDictTabed(dct,ntab=10):
    for k,v in dct.items():
        sk  = str(k)
        tab = ' '*max(0,ntab-len(sk))
        print sk,tab,": ",v

printDictTabed({454:99897754545,"x":5454,"john":"whatever"},ntab=6)

输出:

x       :  5454
john    :  whatever
454     :  99897754545

但是这不可能以某种方式使用标准python格式吗?

2 个答案:

答案 0 :(得分:1)

填充和对齐字符串

默认情况下,格式设置为仅占用表示内容所需的尽可能多的字符。但是,也可以定义将值填充为特定长度。

不幸的是,新旧格式之间的默认对齐方式有所不同。旧样式默认为右对齐,而新样式则默认为左。

  

https://pyformat.info/

右对齐:

'%10s' % ('test',)

'{:>10}'.format('test')

左对齐:

'%-10s' % ('test',)

'{:10}'.format('test')

您的示例:

def printDictTabed(dct):
    for k,v in dct.items():
        print('{:10}:{:>15}'.format(str(k), str(v)))

printDictTabed({454:99897754545,"x":5454,"john":"whatever"})

输出:

454       :    99897754545
x         :           5454
john      :       whatever

答案 1 :(得分:0)

使用string formating

d= {454:99897754545,"x":5454,"john":"whatever"}

for k, v in d.items():
    print('%-5s:   %-20s' % (k,v))

输出:

x    :   5454                
john :   whatever            
454  :   99897754545