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

Python 从mbox文件中提取最后一封邮件,python,mbox,Python,Mbox,我有一个包含许多电子邮件的mbox文件,我尝试了这段代码,它通常读取所有邮件,我想要的是只读取和打印mbox文件的最后一封电子邮件,并将其单独存储在另一个mbox文件中。 这是我编写的简单代码: import mailbox for msg in mailbox.mbox('C:\\Users\\hmk\Desktop\\PFE 2019\\ML\\MachineLearningPhishing-master\\MachineLearningPhishing-master\\code\\res

我有一个包含许多电子邮件的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)

您的代码有语法错误;for循环后面的行应该缩进。但实际上,解决问题的办法是将其移出循环。然后你只需要在循环中放入其他东西

导入邮箱 对于邮箱.mbox'C中的消息:\\Users\\hmk\Desktop\\PFE 2019\\ML\\MachineLearningPhishing master\\MachineLearningPhishing master\\code\\resources\\mboxfile.mbox': 通过 我们现在在循环之外,“msg”包含最后一条消息 printmsg 当然,更好的解决方法是根本不循环

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

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

all_messages=mailbox.mbox。。printall_messages[-1]?在Python3.7上,使用messages[-1]会引发一个KeyError。使用消息[lenmessages-1]很有效。谢谢,对于我应该称之为“如何使用批处理脚本”的部分,朋友们不允许朋友们使用Windows,但这应该是非常简单的。快速的谷歌搜索让我明白了,但让我看看罗兰的评论,他是对的,它返回的是散列而不是列表。当我在jupyter笔记本上执行它时,它工作正常,但当我使用批处理脚本时,它给了我一个错误键错误:带有键-1的ne消息