Python使用\t制表符输出IPv4解析结果时格式错位如何解决
问题原因
制表符\t的对齐规则是按每8个字符为一个固定跳格位,当某段内容的长度跨过8字符的整数倍边界时,后续制表符的落点就会偏移,无法保证列对齐。另外原有代码里第一列的标签长度不统一(比如Address:后无空格、Network: 后多带一个空格),进一步放大了错位问题。
修复方法
放弃用\t凑对齐的写法,直接用Python字符串固定宽度格式化语法,给每一列指定固定预留宽度,内容长度不足时自动补空格,从根源上保证列对齐。
IPv4点分十进制格式的最大固定长度为15字符(例如255.255.255.255),给第二列预留15字符宽度即可覆盖所有情况;第一列标签统一预留10字符宽度左对齐,即可保证所有列整齐。
修复后的打印代码如下:
print("") # 固定列宽格式化,左对齐自动补空格 print(f"{'Address:':<10}{parts[0]:<15}{binary_ip}") print(f"{'Netmask:':<10}{subnet_mask:<15}{subnet_mask_binary}") print(f"{'Wildcard:':<10}{wildcard_:<15}{binary_wildcard}") print("-" * 70) print(f"{'Network:':<10}{network_decimal:<15}{network_binary}") print(f"{'Broadcast:':<10}{broadcast:<15}{broadcast_binary}") print(f"{'HostMin:':<10}{hostmin_decimal:<15}{hostmin_binary}") print(f"{'HostMax:':<10}{hostmax_decimal:<15}{hostmax_binary}") print(f"{'Host/Net:':<10}{str(hosts)}")
格式语法说明:
{:<10}:表示内容左对齐,预留10个字符宽度,内容长度不足时自动在右侧补空格- 第二列的
{:<15}:左对齐预留15个字符宽度,适配最长的IPv4点分十进制字符串,短地址自动补空格,保证后续二进制列的起始位置完全一致
内容的提问来源于stack exchange,提问作者Nischal Lamichhane
相关产品推荐
相关产品推荐

