从mbox文件中提取最后一封邮件

时间:2019-08-04 18:54:08

标签: python mbox

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

Result {1={past=7.5, present=15.0}, 2={past=10.0, present=35.0}}

1 个答案:

答案 0 :(得分: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

很明显,生产脚本应该具有一些错误检查和帮助等内容,但我将其保留为练习。