【问题标题】:Extract the last mail from a mbox file从 mbox 文件中提取最后一封邮件
【发布时间】:2019-12-12 10:23:51
【问题描述】:

我有一个包含许多电子邮件的 mbox 文件,我尝试了这个通常读取所有消息的代码,我想要的是仅读取和打印 mbox 文件的最后一封电子邮件,并将其单独存储在另一个 mbox 文件中。 这是我写的简单代码:

import mailbox

for msg in mailbox.mbox('C:\\Users\\hmk\Desktop\\PFE 2019\\ML\\MachineLearningPhishing-master\\MachineLearningPhishing-master\\code\\resources\\mboxfile.mbox'):
print(msg)

【问题讨论】:

  • all_messages = mailbox.mbox(..) print(all_messages[-1]) ?

标签: python mbox


【解决方案1】:

您的代码有语法错误; for 循环之后的行应该缩进。但实际上解决问题的方法是将其移到循环之外。然后你只需要在循环中放一些别的东西。

import mailbox

for msg in mailbox.mbox('C:\\Users\\hmk\Desktop\\PFE 2019\\ML\\MachineLearningPhishing-master\\MachineLearningPhishing-master\\code\\resources\\mboxfile.mbox'):
    pass
# We are now outside the loop, and `msg` contains the last message
print(msg)

当然,更好的解决方法是根本不循环。

messages = mailbox.mbox('C:\\Users\\hmk\Desktop\\PFE 2019\\ML\\MachineLearningPhishing-master\\MachineLearningPhishing-master\\code\\resources\\mboxfile.mbox')
print(messages[messages.keys()[-1]])

以上假设您使用的 Python 版本足够新,可以使字典按插入顺序排序。如果没有,你可能确实需要循环。

最后,可能不要硬编码绝对文件路径。让您的程序接受文件名参数,这样您就可以在任何目录中的任何 mbox 文件上运行它。

import mailbox
import sys

messages = mailbox.mbox(sys.argv[1])
print(messages[messages.keys()[-1]])

这样称呼

python3 lastmsg.py C:\Users\hmkDesktop\PFE 2019\ML\MachineLearningPhishing-master\MachineLearningPhishing-master\code\resources\mboxfile.mbox >last

显然,生产脚本应该有一些错误检查和帮助等,但我把这些留作练习。

【讨论】:

  • 在 Python 3.7 上,使用 messages[-1] 会引发 KeyError。使用messages[len(messages)-1] 有效。
  • 谢谢,对于我应该调用它的部分,我该如何使用批处理脚本来完成
  • 朋友不要让朋友使用 Windows,但这应该是完全微不足道的。快速谷歌搜索让我stackoverflow.com/questions/21582886/…
  • 但是让我弄清楚 Roland 的评论,他是对的,它返回的是哈希而不是列表。
  • 当我在 jupyter notebook 上执行它时它运行良好,但是当我使用批处理脚本时它给了我一个错误Key Error: ne message with key -1
猜你喜欢
  • 1970-01-01
  • 2012-02-15
  • 2019-10-05
  • 1970-01-01
  • 2017-11-26
  • 2020-08-02
  • 2018-02-11
  • 2012-04-15
  • 2020-08-04
相关资源
最近更新 更多