Python CSV统计问题:PLS0设备Reserved端口统计结果异常为0
问题分析:PLS0端口统计结果始终为0的原因及修复方案
我帮你排查了代码里的问题,主要有两个关键点导致统计结果异常:
1. 循环变量引用错误
在第二个统计PLS0端口的循环里,你错误地沿用了第一个循环的变量total_reserved[2]来判断端口状态,但此时total_reserved已经是第一个循环结束后最后一行的内容,和当前循环的pls0行完全不相关。正确的做法应该用当前循环的pls0[2]来判断状态。
2. 设备名称不匹配(潜在核心问题)
你的需求里要统计的设备名称是'L1 switches/L1 Switch 10G PLS.BLLAB/Blade01',但代码里写的是'L1 switches/L1 Switch 10G PLS0.BLLAB/Blade01'(多了一个0),如果CSV里的设备名称确实不带0,这会直接导致找不到匹配的行,统计结果自然为0。
修复后的优化代码
另外我还优化了代码逻辑,不需要两次打开和读取同一个CSV文件,一次循环就能完成两个统计任务,既高效又避免变量混淆:
import csv file_name = input('Enter File Name: ') + '.csv' total_ports = 500 total_reserved = 0 pls0_reserved = 0 # 用with语句自动管理文件资源,避免漏关文件 with open(file_name, 'r') as f: reader = csv.reader(f) for row in reader: # 先判断端口是否为Reserved状态 if row[2] == 'Reserved': total_reserved += 1 # 同时判断是否是目标PLS0设备 if row[0] == 'L1 switches/L1 Switch 10G PLS.BLLAB/Blade01': pls0_reserved += 1 print(total_reserved, 'out of ', total_ports, 'PLS ports are reserved') print(pls0_reserved, 'of these', total_reserved, 'are pls0 ports')
优化说明
- 使用
with open()语句自动处理文件的打开与关闭,避免资源泄漏 - 一次遍历CSV文件即可完成两个统计目标,提升运行效率
- 用语义更清晰的变量名替代
ctr、ctr_pls0,代码可读性更强
内容的提问来源于stack exchange,提问作者Jack Bell
相关产品推荐
相关产品推荐

