【问题标题】:How to align print output by field when printing key,value pairs in Python [duplicate]在Python中打印键值对时如何按字段对齐打印输出[重复]
【发布时间】:2019-06-13 01:55:08
【问题描述】:

我想打印 Python 配置解析器对象的内容。

以下代码

for section in system_config.config.sections():
    print ("\n[" + section + "]")
    for (key, value) in system_config.config.items(section):
          print(key + "=" + value)

打印

[GENERAL]
data_roots=[["c:\\data", "/data"] , ["d:\\data2", "/data2"]] 
test_data_folder=c:\data\atp-test-data
mount_render_python_apps=false
mount_render_modules=false
host_memory=24
host_number_of_cores=4
at_core_threads=15

为了可读性,最好使用以下内容:

[GENERAL]
data_roots                = [["c:\\data", "/data"] , ["d:\\data2", "/data2"]] 
test_data_folder          = c:\data\atp-test-data
mount_render_python_apps  = false
mount_render_modules      = false
host_memory               = 24
host_number_of_cores      = 4
at_core_threads           = 15

在 C++ 中,这可以通过在使用流运算符“

问题是,如何用 Python 做到这一点?

【问题讨论】:

  • 也许使用标签 '\t' ?
  • 请看页面顶部的链接。

标签: python


【解决方案1】:

您可以使用{:<30} 格式将长度最多为 30 的字符串向左对齐 这是一个完整的例子:

import random
import string

def randomstr():
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(random.randint(1,30)))


for _ in range(10):
    print('{:<30} = {}'.format(randomstr(), randomstr()))

样本输出

ohpy                           = bxqoknodteueocokveygkdxmzzxubi
rsulmvnqeyeihchanxrggorlm      = vtfeu
cvuhpavispkfbttbadt            = d
dgfcqtswqjvywosiikkjdmpyvjhoo  = ijx
ainrzifrjrkqfanrxyczs          = aluoaoizxtmcrvqv
zpujlyopvrucjqugtaamu          = pezh
eot                            = uizfrxpkjywtlxbgzhrcuuj
hfavmswauekyrtgzrhyxwmbgcyzfq  = znwfpuosysirtbkiiimzjkifbueq
qxsqzwkyafcwjrjwnwlradrudush   = barehtexzpku
hntgerexophiqbafmwfwdomas      = frtsmtakcfztlwfesiijacbmocksqq

您可能不知道密钥字符串的最大长度。但是你可以在你的情况下用这样的东西maxlen = max(len(k) for k in system_config.config.keys()) 并以'{:<{width}} = {}'.format(randomstr(), randomstr(), width=maxlen) 这样的格式使用maxlen

【讨论】:

【解决方案2】:

.format 字符串或 f 字符串的方法。

print( '{:<20}={}'.format(key,value) ) # python 2 friendly
#or
print( f'{key:<20}={value}' )

20是对宽度的猜测,我没有数过。

【讨论】:

    【解决方案3】:

    Python 的内置 str 类有一个 ljust 方法,该方法在给定宽度和可选字符的情况下执行左对齐文本。

    for section in system_config.config.sections():
        print ("\n[" + section + "]")
        max_len = max(len(key) for key, _ in system_config.config.items(section))
        for key, value in system_config.config.items(section):
              print(f'{key.ljust(max_len)} = {value}')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 2017-04-15
      • 1970-01-01
      • 2016-05-11
      • 2017-06-27
      • 2021-12-21
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多