Я написал скрипт на python 3.5, который просматривает все электронные письма в моей папке outlook «Входящие», что-то делает, а затем перемещает электронные письма из папки входящих в папку «Отправленные».Из-за некоторых проблем с pyinstaller мне пришлось перейти на python 2.7, и после этого код стал очень медленно обрабатывать каждое письмо.
Я хотел бы знать, есть ли способ ускорить мой кодлегко, я считаю, что основная проблема - единственный цикл for, который у меня есть в моем коде, а именно:
import os
import win32com.client
import itertools
import shutil
OlSaveAsType = {
"olTXT": 0,
"olRTF": 1,
"olTemplate": 2,
"olMSG": 3,
"olDoc": 4,
"olHTML": 5,
"olVCard": 6,
"olVCal": 7,
"olICal": 8
}
desktop = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
newpath = desktop + '\\Mails2'
if not os.path.exists(newpath):
os.makedirs(newpath)
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders("My Main Folder")
inbox = folder.Folders("Inbox")
sent_items = folder.Folders("Sent Items")
messages = inbox.Items
a = (len(messages))
message = messages.GetFirst()
#for message in messages:
for _ in itertools.repeat(None, a):
messages = inbox.Items
message = messages.GetFirst()
Subject = message.subject
Sender = message.Sender.GetExchangeUser().PrimarySmtpAddress
Time = message.ReceivedTime
message.SaveAs(newpath + '\\' + Sender + ".msg", OlSaveAsType['olMSG'])
message.Move(sent_items)
message = messages.GetNext()
закомментированная строка (для сообщения в сообщениях :), кажется, быстрее, чемitertools, однако, когда я попытался использовать его, по какой-то причине я никогда не мог получить все сообщения в подпапке, сначала это заняло бы только половину сообщений (оказалось, я уменьшал контейнер сообщений с каждым циклом, перемещая почту в другойпапка), поэтому я попытался удалить messages.GetNext (), чтобы цикл for выполнял всю работу, но все равно было бы сообщение, оставленное неизменным, только itertools с длиной элементов inmail, казалось, делали эту работу.