Python邮件统计问题:如何将多组tuple存入list并生成指定CSV文件
解决方案
核心修改思路
- 初始化空列表统一存储所有(发件人邮箱, 发送时间)元组
- 遍历邮件时将生成的元组存入列表,替代直接打印
- 用Python内置
csv模块规范写入双列CSV文件 - 同步完成邮件数量统计、去重发件人列表,以及文本文件的写入
修改后的完整代码
import csv # 初始化存储容器与计数器 email_hour_list = [] total_emails = 0 unique_senders = set() with open('../data/mbox-short.txt', 'r') as file_h: for line in file_h: if line.startswith('From '): word_list = line.split() # 直接提取元素,避免切片生成冗余列表 sender_email = word_list[1] send_time = word_list[5] # 若仅需小时部分,可改为word_list[5].split(':')[0] email_time_tuple = (sender_email, send_time) email_hour_list.append(email_time_tuple) unique_senders.add(sender_email) total_emails += 1 # 输出统计结果 print(f"总邮件数量: {total_emails}") print("去重发件人列表:") for sender in unique_senders: print(f"- {sender}") # 写入文本文件 with open('../data/email_records.txt', 'w') as txt_file: txt_file.write("发件人邮箱\t邮件发送时间\n") for item in email_hour_list: txt_file.write(f"{item[0]}\t{item[1]}\n") # 写入CSV文件 with open('../data/email_records.csv', 'w', newline='', encoding='utf-8') as csv_file: csv_writer = csv.writer(csv_file) # 写入表头 csv_writer.writerow(["发件人邮箱", "邮件发送时间"]) # 批量写入所有数据行 csv_writer.writerows(email_hour_list)
关键修改点说明
- 新增
email_hour_list列表:解决原代码零散输出tuple的问题,为批量写入文件提供统一数据源 - 用
set存储发件人:自动实现去重,确保每个发件人仅显示一次 - 使用
csv.writerows方法:一次性写入所有元组数据,保证CSV文件的双列格式完全符合要求 - 文本文件采用制表符分隔列,兼顾可读性与格式整齐
- 优化数据提取逻辑,直接取列表元素替代切片操作,代码更简洁高效
内容的提问来源于stack exchange,提问作者Mohamad Khoshhal
相关产品推荐
相关产品推荐

