You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python邮件统计问题:如何将多组tuple存入list并生成指定CSV文件

解决方案

核心修改思路

  1. 初始化空列表统一存储所有(发件人邮箱, 发送时间)元组
  2. 遍历邮件时将生成的元组存入列表,替代直接打印
  3. 用Python内置csv模块规范写入双列CSV文件
  4. 同步完成邮件数量统计、去重发件人列表,以及文本文件的写入

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:08:26