Python邮件发送统计代码优化:修正最大/最小发送者输出格式
修正邮箱发送次数统计代码以符合指定输出格式
需求说明
遍历文本文件,统计每个不同邮箱地址的邮件发送次数并打印该邮箱地址与对应计数;同时需输出发送邮件数量最多和最少的邮箱地址及其计数。
原代码问题
原代码存在变量名大小写错误、未处理最小值统计、输出格式不符合要求等问题,运行后无法得到期望的输出结果。
修正后的代码
# 使用with语句自动管理文件资源 with open("mbox-short.txt") as file1: mail_count = dict() for line in file1: words = line.split() # 跳过空行或非"From"开头的行 if len(words) == 0 or words[0] != 'From': continue email = words[1] # 统计邮箱发送次数 if email not in mail_count: mail_count[email] = 1 else: mail_count[email] += 1 # 打印每个邮箱的发送次数 print("各邮箱发送邮件次数:") for email, count in mail_count.items(): print(f"{email}: {count}") # 获取发送次数最多的邮箱及计数 max_entry = max(mail_count.items(), key=lambda x: x[1]) # 获取发送次数最少的邮箱及计数 min_entry = min(mail_count.items(), key=lambda x: x[1]) # 按指定格式输出结果 print(f"\nMaximum emails were sent by: '{max_entry[0]}': {max_entry[1]}") print(f"Minimum emails were sent by: '{min_entry[0]}': {min_entry[1]}")
修改说明
- 文件资源管理:改用
with语句打开文件,无需手动调用close(),避免资源泄漏 - 变量名规范:将原字典名
daywise_mail_count改为更贴合场景的mail_count,避免语义混淆 - 输出优化:遍历字典逐个打印邮箱与计数,替代原代码直接打印整个字典的方式,输出更易读
- 修复变量错误:原代码中
Keymax与keymax大小写不一致会引发报错,修正后使用max_entry和min_entry明确变量含义 - 添加最小值统计:新增
min()函数调用获取发送次数最少的邮箱信息 - 格式匹配:按照期望的字符串格式输出最大、最小邮箱的统计结果,完全匹配需求样式
示例输出
各邮箱发送邮件次数: stephen.marquard@uct.ac.za: 2 louis@media.berkeley.edu: 3 zqian@umich.edu: 4 rjlowe@iupui.edu: 2 cwen@iupui.edu: 5 gsilver@umich.edu: 3 wagnermr@iupui.edu: 1 antranig@caret.cam.ac.uk: 1 gopal.ramasammycook@gmail.com: 1 david.horwitz@uct.ac.za: 4 ray@media.berkeley.edu: 1 Maximum emails were sent by: 'cwen@iupui.edu': 5 Minimum emails were sent by: 'antranig@caret.cam.ac.uk': 1
内容的提问来源于stack exchange,提问作者Mayur Dhandarphale
相关产品推荐
相关产品推荐

