On Mon, Oct 18, 2010 at 8:42 AM, <tinn...@isbd.co.uk> wrote: > I'm trying to delete some messages from a mailbox when they are older > than a certain number of days. > > If I iterate through the mailbox and find a message that needs > deleting how do I get its key so I can do "remove(key)"? > > The trouble is that, as the documentation says: "The default Mailbox > iterator iterates over message representations, not keys as the > default dictionary iterator does." So if you try something like:- > > for f in os.listdir(junkdir): > mbxPath = os.path.join(junkdir, f) > mbx = mailbox.mbox(mbxPath, factory=None) > mbx.lock() > for k, msg in mbx: > if <something is true> > msg.remove(k) > mbx.flush() > mbx.unlock() > > Then you get an exception on "for k, msg in mbx" which is an attribute > error, presumably because a mailbox isn't a 'real' iterator.
No, it's probably because iterating over a Mailbox yields Message-s rather than (key, Message) pairs; Python thus tries to unpack each Message into a (k, msg) pair (since that's how you wrote your for-loop), but this fails since (I would assume) Messages aren't iterable. > So how, > do I get that key value? If you want to iterate over key-value pairs (aka "items"), then ask Mailbox for items in the first place: for k, msg in mbx.iteritems(): # rest of code Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list