从defaultdict(list)打印键值对及Cisco WLC SSH程序打印异常问题
解决Cisco WLC客户端摘要报告的打印格式问题
你已经搞定了SSH连接和数据解析的核心环节,就差打印输出的格式规整度了。咱们来调整下代码,让报告排版更清晰易读:
优化后的打印代码
# 先统计所有值列表的最大长度,保证所有列能对齐 max_col_num = max(len(v) for v in e.values()) if e else 0 # 自定义列宽:键列留30位足够容纳AP名称,数值列设为8位保证排版整齐 key_col_width = 30 value_col_width = 8 for k, v in e.items(): # 键左对齐占满key_col_width位 print(f'{k:<{key_col_width}}', end='') # 逐个打印对应的值,每个值左对齐占value_col_width位 for item in v: print(f'{item:<{value_col_width}}', end='') # 如果当前值列表长度不足最大列数,补空格对齐 for _ in range(max_col_num - len(v)): print(' ' * value_col_width, end='') print()
原代码格式问题的原因
- 原代码里
'{:25}'.format(k)是默认右对齐,短键(比如"AP Count")会在左侧补大量空格,而不是右侧,导致视觉上的错乱;改成'{:<25}'就能实现左对齐,让键紧贴左侧排列。 - 数值列的
'{:5}'.format(i)同样是右对齐,不同长度的内容会出现排版错位,改用左对齐的固定宽度格式化会更规整。 - 原代码的
print("\n")会输出两个换行符,导致行间距过大,用单个print()就能只换一行。
额外优化:让报告更贴近设备原生风格
如果你的字典e里包含表头项(比如"AP Count"对应统计标题),可以给报告加上表头和分隔线,可读性会更强:
if e: # 提取并打印表头 header_key, header_vals = next(iter(e.items())) print(f'{header_key:<{key_col_width}}', end='') for val in header_vals: print(f'{val:<{value_col_width}}', end='') print() # 打印分隔线 print('-' * (key_col_width + max_col_num * value_col_width)) # 打印后续数据行 for k, v in list(e.items())[1:]: print(f'{k:<{key_col_width}}', end='') for item in v: print(f'{item:<{value_col_width}}', end='') for _ in range(max_col_num - len(v)): print(' ' * value_col_width, end='') print()
这样输出的报告结构清晰,和Cisco WLC原生的show client summary输出风格一致,看起来更专业。
内容的提问来源于stack exchange,提问作者MarkS
相关产品推荐
相关产品推荐

