You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

错误分析

现有代码存在三个核心问题:

  1. 仅处理了CSV行的前两个元素:csv.reader读取整行后,代码只取了row[0]和row[1],忽略了后续的多组用户名和时间数据
  2. 输出逻辑位置错误:将异常记录的输出放在了循环内部,每添加一条异常就立即输出,且重复输出已有记录
  3. 无异常判断逻辑失效: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:05:21