我正在使用标准 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:
....
显然我上面的代码不起作用,但我认为必须有一个解决方案,以完全独立包含类中的功能 block 。
最佳答案
我的设置非常不同。如果您确实想要一个可迭代的类来处理这个问题,
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
关于Python 类和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669738/