如何解析CSV文件,统计含指定关键词邮件的发件人日期频次并生成报告?
用Python实现CSV文件的自动回复邮件统计与汇总
实现步骤
- 导入依赖库:用
csv模块读取CSV文件,defaultdict实现数据分组存储,datetime处理日期排序逻辑。 - 读取并过滤数据:遍历CSV每一行,筛选出
message_subject包含<em>Auto Reply:</em>的记录。 - 分组统计与日期排序:按
Sender_Address分组,统计每组的记录频次,同时对每组的日期做升序排序。 - 输出指定格式的汇总报告:按照要求的列格式打印最终统计结果。
完整代码
import csv from collections import defaultdict from datetime import datetime # 初始化存储结构:键为发件人邮箱,值为对应日期列表 sender_data = defaultdict(list) # 读取目标CSV文件(替换为你的文件路径,示例中假设文件名为data.csv) with open('data.csv', 'r', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: # 筛选主题包含指定关键词的记录 if '<em>Auto Reply:</em>' in row['message_subject']: sender = row['Sender_Address'] date_str = row['Date'] # 需与CSV实际日期列名一致,若不同请修改此处键名 sender_data[sender].append(date_str) # 处理数据:统计频次、对日期升序排序 processed_data = [] for sender, dates in sender_data.items(): sorted_dates = sorted(dates, key=lambda d: datetime.strptime(d, '%Y-%m-%d')) processed_data.append({ 'sender': sender, 'frequency': len(sorted_dates), 'sorted_dates': sorted_dates }) # 打印表头 print(f"{'Sender_Address':<20} {'Frequency':<12} Date (Ascending sorted)") # 打印每条统计记录 for item in processed_data: dates_str = ', '.join(item['sorted_dates']) print(f"{item['sender']:<20} {item['frequency']:<12} {dates_str}")
注意事项
- 确认CSV文件中的日期列名为
Date,若实际列名不同,需修改代码中row['Date']的键名。 - 若CSV文件使用非utf-8编码(如gbk),需调整
open函数的encoding参数。 - 代码中的文件名
data.csv需替换为你实际的CSV文件路径。
内容的提问来源于stack exchange,提问作者Senior Systems Engineer
相关产品推荐
相关产品推荐

