我正在使用标准的Python邮箱模块从Maildir中读取消息。读取后,我将解析它们并将结果存储在字典中。我已将此功能放入类中,并使用__getitems__
启用程序的其他组件来访问它们。这很好,我很高兴我的代码既功能又可读。
我的问题是如何将它从一次解析一条消息的类转换为对Maildir中的每条消息进行迭代的对象。一个简单的解决方案是在主程序中放置一个for循环并使用mailbox.iterkeys:
inbox = mailbox.Maildir('Maildir')
for key in inbox.iterkeys():
mailparse.process(inbox, key)
这行得通,但对我来说似乎并不整洁。我希望类中具有所有与maildir相关的功能,而不必将每个maildir密钥传递给它。就像是:
class mailparse():
def __init__(self, mdirpath):
inbox = mailbox.Maildir(mdirpath)
def __getitems__(self, key):
return self.dictionary[key]
def process():
for key in inbox.iterkeys()
....
for x in Mailprocess:
....
显然,我上面的代码无法正常工作,但我认为必须根据这些思路制定解决方案,以完全独立地包含类中的功能块。
最佳答案
我将以不同的方式进行设置。如果您确实想要一个可迭代的类来处理此问题,
class MailboxParser(object):
def __init__(self, mbox):
self.mbox = mbox
def __getitem__(self, key):
return self._process(key, self.mbox[key])
def __iter__(self):
for key, val in self.mbox.iteritems():
yield self._process(key, val)
def _process(self, key, content):
"""Do whatever on a single message"""
__iter__
成员允许您执行for x in MailboxParser(mbox):
# now x is the result of processing a single message