Python代码排查:统计文件高频邮箱时频率计算错误
代码错误排查与修正
错误原因分析
- 统计字典重复初始化:
count = dict()写在逐行处理的循环内部,每次处理一行都会新建空字典,完全无法累积所有邮箱的出现次数,最终字典里只会保留最后一次处理的邮箱,次数固定为1。 - 最大值变量重复重置:
bigcount=0和bigword=None同样放在循环内部,每处理一行就会重置最大值记录,无法持续追踪全局的最高发送次数。 - 行匹配逻辑不准确:
line.startswith('From')会误匹配From:开头的邮件头部行(这类行的第二个元素不是有效邮箱地址),应该用line.startswith('From ')(带空格)精准匹配邮件发送记录行。
修正后的代码
name = input("Enter file:") if len(name) < 1: name = "mbox-short.txt" handle = open(name) # 初始化统计字典和最大值变量,放在循环外部保证全局有效 count = dict() bigcount = 0 bigword = None for line in handle: line = line.rstrip() # 精准匹配发送记录行 if line.startswith('From '): words = line.split() email = words[1] # 累积统计邮箱出现次数 count[email] = count.get(email, 0) + 1 # 遍历统计结果找出最高频邮箱 for email, times in count.items(): if times > bigcount: bigcount = times bigword = email print(bigword, bigcount)
修正说明
- 把统计相关的初始化代码移到循环外部,确保统计过程是全局累积的。
- 调整行匹配条件,避免误处理非发送记录的行。
- 将最大值遍历逻辑移到文件读取完成后,只需要遍历一次统计好的字典,既保证结果准确也提升了效率。
内容的提问来源于stack exchange,提问作者Mohit Kumar
相关产品推荐
相关产品推荐

