【问题标题】:Horizonatal alignment with python print / write functions?与python打印/写入功能水平对齐?
【发布时间】:2020-01-18 02:18:06
【问题描述】:

通常我需要打印列表、字典等具有良好的水平对齐方式(类似于 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 格式吗?

【问题讨论】:

    标签: python formatting pretty-print


    【解决方案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
    

    【讨论】:

    • 在这种情况下,应该注意%格式更像是非常古老的格式。现在有f-strings 可以做.format() 可以做的事情,同时速度更快。
    【解决方案2】:

    使用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   
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2020-09-26
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多