Python 如何将电子邮件保存到文件而不加载到内存中?
如何将电子邮件保存到文件而不加载到内存中? 我用 但是消息被加载到内存中。python反对使用POP3协议。您的邮件服务器可能理解IMAP,因此您可以使用它来获取部分邮件,并立即将每个部分写入磁盘 但是如果您有使用POP3,那么您就很幸运了:POP3协议是面向行的。Python的poplib库是纯Python的,通过查看添加迭代器是一件小事。我没有费心从Python 如何将电子邮件保存到文件而不加载到内存中?,python,email,python-2.7,poplib,Python,Email,Python 2.7,Poplib,如何将电子邮件保存到文件而不加载到内存中? 我用 但是消息被加载到内存中。python反对使用POP3协议。您的邮件服务器可能理解IMAP,因此您可以使用它来获取部分邮件,并立即将每个部分写入磁盘 但是如果您有使用POP3,那么您就很幸运了:POP3协议是面向行的。Python的poplib库是纯Python的,通过查看添加迭代器是一件小事。我没有费心从POP3类派生,所以这里介绍了如何通过猴子补丁实现这一点: from poplib import POP3 def iretr(self, w
POP3
类派生,所以这里介绍了如何通过猴子补丁实现这一点:
from poplib import POP3
def iretr(self, which):
"""
Retrieve whole message number 'which', in iterator form.
Return content in the form (line, octets)
"""
self._putcmd('RETR %s' % which)
resp = self._getresp() # Will raise exception on error
# Simplified from _getlongresp()
line, o = self._getline()
while line != '.':
if line[:2] == '..':
o = o-1
line = line[1:]
yield line, o
line, o = self._getline()
POP3.iretr = iretr
然后,您可以获取消息并一次一行写入磁盘,如下所示:
pop_conn = POP3(servername)
...
msg_file = open(msg_file_name, "wb")
for line, octets in pop_conn.iretr(msg_number):
msg_file.write(line+"\n")
msg_file.close()
你不能?Python中的所有操作基本上都是X->Memory buffer->Disk..我认为这需要考虑套接字编程的方向。但是我不知道怎么做。再说一遍,
socket
->内存缓冲区
->磁盘
。。同样的事情。从组装的角度来看,一切都是CPU和内存计算,而不是其他。它基本上是一点一点地改变内存分配,并告诉CPU从内存中取出东西到主板的其他部分(例如,磁盘)。你不能改变记忆。。对不起..@Tor,你看过流媒体视频吗?你认为它是如何工作的?@alexis它从插座加载到内存中。。不同之处在于,它由NIC上的板载CPU接收,发送到CPU进行处理,重定向(如果在RAM中没有存储一段时间)到图形内存缓冲区,然后为方便起见进行渲染。。仍然存储在内存中。谢谢你的提示,但我需要它来使用pop3protocol@agry,见修订后的答案。
pop_conn = POP3(servername)
...
msg_file = open(msg_file_name, "wb")
for line, octets in pop_conn.iretr(msg_number):
msg_file.write(line+"\n")
msg_file.close()