如何解析mbox文件并按日期统计邮件数量?求技术实现指导
解析Mbox文件并按日期分组统计邮件数量
用Python的mailbox库配合email.utils模块就能实现这个需求,核心是解析邮件头里的Date字段,再按指定日期维度分组计数。
完整实现代码
import mailbox from email.utils import parsedate_to_datetime from datetime import datetime def count_emails_by_date(mbox_path): date_counts = {} # 打开目标mbox文件 mbox = mailbox.mbox(mbox_path) for message in mbox: # 提取邮件的Date头部信息 date_header = message.get('Date') if not date_header: continue # 跳过无日期字段的邮件 try: # 将邮件日期字符串解析为标准datetime对象(兼容多种邮件日期格式) email_datetime = parsedate_to_datetime(date_header) # 按「年-月-日」生成分组键,可根据需求修改格式 date_key = email_datetime.strftime('%Y-%m-%d') # 更新对应日期的邮件计数 date_counts[date_key] = date_counts.get(date_key, 0) + 1 except Exception as e: print(f"解析日期出错: {e},跳过该邮件") continue # 按日期排序后输出统计结果 for date, count in sorted(date_counts.items()): print(f"{date}: {count} 封邮件") return date_counts # 调用示例,替换为你的mbox文件路径 if __name__ == "__main__": count_emails_by_date("path/to/your/mailbox.mbox")
关键细节说明
- 提取日期字段:每封邮件的日期信息存在
Date头部,通过message.get('Date')获取,部分邮件可能缺失该字段,直接跳过即可。 - 解析日期格式:邮件的
Date字段格式多样(比如Wed, 15 Nov 2023 10:30:00 +0800),email.utils.parsedate_to_datetime能自动兼容这些格式,转换为标准datetime对象。 - 自定义分组维度:如果需要按月份统计,把
date_key的格式改为'%Y-%m';按年份统计则改为'%Y'即可。 - 异常处理:部分邮件的日期格式可能不规范,加入异常捕获避免程序崩溃,同时打印错误信息便于排查问题。
内容的提问来源于stack exchange,提问作者Param Shah
相关产品推荐
相关产品推荐

