You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Python打印语句的均匀对齐格式化

实现测试结果对齐的Python格式化方案

你的需求其实可以通过Python字符串格式化里的自定义填充字符功能轻松实现,不用手动拼接固定的点字符串。先说说你原来代码的问题:你把测试名固定为30个字符(不足的补空格),再拼接固定的................... OK,这样测试名后面是空格+点,不是连续的点,而且不同测试名加上固定字符串后的总长度不一致,自然导致OK的位置不对。

下面给你两种靠谱的解决方案:

方案1:固定对齐列(手动指定宽度)

如果你希望OK/FAILED始终从第N列开始(比如第40列),可以直接用格式化语法指定填充字符为.,左对齐到目标宽度:

test_names = [
    'test_integer_to_month',
    'test_month_to_integer',
    'test_abbreviated_int_to_month',
    'test_days_in_month'
]

# 设定测试名部分的总宽度为40,不足的用点填充,后面跟状态
for name in test_names:
    print("{:.<40} OK".format(name))

输出效果就是你想要的:

test_integer_to_month ................... OK
test_month_to_integer ................... OK
test_abbreviated_int_to_month ........... OK
test_days_in_month ...................... OK

这里的{:.<40}语法解释:

  • .:指定填充字符为点
  • <:左对齐(测试名靠左,后面补点)
  • 40:测试名+填充点的总宽度,状态会从第41位开始。

方案2:动态适配最长测试名(更灵活)

如果测试名长度不固定,想自动根据最长的测试名调整填充长度,可以先计算最长测试名的长度,再动态设置宽度:

test_names = [
    'test_integer_to_month',
    'test_month_to_integer',
    'test_abbreviated_int_to_month',
    'test_days_in_month'
]

# 计算所有测试名里的最长长度
max_name_len = max(len(name) for name in test_names)
# 给最长测试名额外加5个点的空间,保证美观
total_width = max_name_len + 5

for name in test_names:
    # 动态传入宽度参数
    print("{:.<{}} OK".format(name, total_width))

这种方式不管测试名多长,都能自动让所有状态对齐,扩展性更强。

补充:状态区分(PASSED/FAILED)

如果要区分通过和失败的状态,只需要把状态作为变量传入即可:

test_results = [
    ('test_integer_to_month', 'OK'),
    ('test_month_to_integer', 'FAILED'),
    ('test_abbreviated_int_to_month', 'OK'),
    ('test_days_in_month', 'OK')
]

max_name_len = max(len(name) for name, _ in test_results)
total_width = max_name_len + 5

for name, status in test_results:
    print("{:.<{}} {}".format(name, total_width, status))

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:14:39