如何实现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
相关产品推荐
相关产品推荐

