LAB3.14网络异常登录检测:Python遍历CSV索引失效问题求助
问题排查:Python CSV遍历异常无法处理所有记录
问题背景
正在完成ZyBooks的LAB3.14《Detecting Network Change》实验,需求如下:
- 读取输入的CSV文件名,用
csv.reader()读取内容 - 检测登录时间(24小时制整数)是否属于非工作时段(9:00-17:00之外),将异常的用户名与时间存入字典
- 程序结束后输出所有异常记录,若无异常则输出提示
给定input1.csv内容为:bob,2,paula,1,nancy,8,thomas,23,zach,22,charlotte,4,预期输出全部6条异常记录,但现有代码仅输出首条记录:
Anomaly Login Attempts: bob 2
错误分析
现有代码存在三个核心问题:
- 仅处理了CSV行的前两个元素:
csv.reader读取整行后,代码只取了row[0]和row[1],忽略了后续的多组用户名和时间数据 - 输出逻辑位置错误:将异常记录的输出放在了循环内部,每添加一条异常就立即输出,且重复输出已有记录
- 无异常判断逻辑失效:
len(anomalies) == 0的判断放在了异常添加的分支里,此时字典必然不为空,永远无法触发无异常提示
修正后的代码
import csv anomalies = dict() filename = input() with open(filename, mode='r') as f: csv_reader = csv.reader(f) for row in csv_reader: # 按步长2遍历整行,每两个元素为一组(用户名+时间) for i in range(0, len(row), 2): name = row[i] time = int(row[i+1]) # 判断是否为非工作时段 if not (9 <= time <= 17): anomalies[name] = time # 循环结束后统一处理输出 if len(anomalies) == 0: print('No anomaly login attempts') else: print('Anomaly Login Attempts:') for key, value in anomalies.items(): print(key, value)
关键修正点说明
- 遍历整行所有元素:使用
range(0, len(row), 2)实现步长为2的遍历,确保每一组用户名和时间都被处理 - 统一输出逻辑:将输出代码移到循环外部,避免重复输出,且确保所有异常都收集完成后再打印
- 修复无异常判断:在所有数据处理完成后判断字典是否为空,正确触发无异常提示
内容的提问来源于stack exchange,提问作者rb5064
相关产品推荐
相关产品推荐

