使用Python的Format Specification Mini-Language指定或自动确定列宽

问题描述 投票:0回答:1

我在Python中有以下示例来打印表:

job_IDs = ['13453', '123', '563456'];
memory_used = [30, 150.54, 20.6];
memory_units = ['MB', 'GB', 'MB'];

for i in range(len(job_IDs)):
    print "Job {item:15} {value[0]:>6}.{value[1]:<6} {units:3}".format(
    item=job_IDs[i]+':', value=memory_used[i].split('.') if '.' in memory_used[i] 
    else  (memory_used[i], '0'), units=memory_units[i])

其结果是:

Job 13453:                 30          MB
Job 123:                  150.54       MB
Job 563456:                20.6        GB

垂直对齐方式符合我的需求,但是水平填充是在代码中手动硬编码的,上面写着:

"Job {item:15} {value[0]:>6}.{value[1]:<6} {units:3}"

((上面的“填充参数”是15, 6, 6, 3

我想:

  • 理想情况下,自动确定填充值(即根据每个字段的最大宽度计算),而不必在上面的语句中对其进行硬编码。

    在上面的示例中,最好有一个片段使用job_IDsmemory_usedmemory_units中最宽的条目的宽度并输出,在各列之间留一个空格:

    Job 13453:   30    MB
    Job 123:    150.54 MB
    Job 563456:  20.6  GB
    
  • <<
  • 我对两个问题的解决方案都很感兴趣:自动计算填充,并使用变量指定填充。
  • 顺便说一下,这个问题是受另一个问题启发的:Using Python's Format Specification Mini-Language to align floats

我在Python中有以下示例来打印表:job_IDs = ['13453','123','563456']; memory_used = [30,150.54,20.6]; memory_units = ['MB','GB','MB'];对于范围内的我(len(job_IDs)):...

python formatting string.format
1个回答
1
投票
job_IDs = ['13453', '123', '563456']; memory_used = ['30', '150.54', '20.6']; memory_units = ['MB', 'GB', 'MB']; w1=15 w2=6 w3=6 w4=3 for i in range(len(job_IDs)): v=memory_used[i].split('.') if '.' in memory_used[i] else (memory_used[i], '0') print "Job {item:{w1}} {value[0]:>{w2}}.{value[1]:<{w3}} {units:{w4}}".format( item=job_IDs[i]+':', w1=w1, w2=w2,w3=w3,w4=w4, value=v, units=memory_units[i])
© www.soinside.com 2019 - 2024. All rights reserved.