如何筛选带附件的未读Outlook邮件并写入DataFrame?代码返回空表
问题分析与修正代码
原代码返回空DataFrame的核心问题有三个:
- 附件判断逻辑错误:
mail.Attachments是Outlook的附件集合对象,不能直接用== True判断是否存在附件,需通过Attachments.Count > 0来验证 - 未读状态修改错误:
mail.UnRead == False是比较操作,不是赋值,无法将邮件标记为已读,应改为mail.UnRead = False - 数据结构设计错误:直接将
body和subject分别追加到列表,会生成扁平的一维列表,转换后的DataFrame无法区分每个邮件的主题和内容,需按邮件维度存储数据
修正后的代码:
import pandas as pd contents = [] for mail in message: # 正确判断未读且带有附件 if mail.UnRead and mail.Attachments.Count > 0: # 按邮件维度存储主题和内容,用字典更清晰 mail_data = { "Subject": mail.Subject, "Body": mail.body } contents.append(mail_data) # 正确标记为已读 mail.UnRead = False # 转换为DataFrame,自动生成列 df = pd.DataFrame(contents)
额外优化说明
如果message对象还没做前置过滤,可以通过Outlook的Restrict方法提前筛选未读邮件,提升遍历效率:
# 假设已获取Outlook收件箱文件夹对象inbox unread_messages = inbox.Restrict("[UnRead] = True") for mail in unread_messages: if mail.Attachments.Count > 0: # 后续逻辑同上 mail_data = { "Subject": mail.Subject, "Body": mail.body } contents.append(mail_data) mail.UnRead = False df = pd.DataFrame(contents)
内容的提问来源于stack exchange,提问作者selereth
相关产品推荐
相关产品推荐

