Python 脚本需要很长时间才能运行

罗伯特·辛德

我设法编写了一段代码(由网络上的多个来源组成,并适应我的需要),它应该执行以下操作:

  • 读取一个excel文件
  • 从 A 列搜索来自特定文件夹的邮件主题中每个单元格的值
  • 如果匹配(单元格值等于主题的前 9 个字符),则将带有单元格值的附件(每封邮件只有一个附件,不多也不少)保存在“输出”文件夹中。
  • 如果不匹配,则转到下一封邮件,分别转到下一个单元格值。
  • 最后,显示运行时间(不是很重要,仅供我了解)

该代码实际上有效(使用只有 9 封电子邮件的电子邮件文件夹进行测试)。我的问题是运行时间。

该脚本的实际范围是在包含 32700 封电子邮件的文件夹中查找 2539 个值并保存附件。

我已经完成了 2 次运行,如下所示:

  1. 32700 封电子邮件中的 2539 个值(约 1 小时后停止)
  2. 32700 封电子邮件中的 10 个值(约 40 分钟后停止;此时脚本处理了 4 个值)

我想知道/学习,是否有办法使脚本更快,或者它是否因为写得不好等而变慢。

下面是我的代码:

from pathlib import Path
import win32com.client
import os
from datetime import datetime
import time
import openpyxl

#name of the folder created for output
output_dir = Path.cwd() / "Orders"

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

folder = outlook.Folders.Item("Shared Mailbox Name")
inbox = folder.Folders.Item("Inbox")

messages = inbox.Items

wb = openpyxl.load_workbook(r"C:\Users\TEST\Path-to-excel\FolderName\ExcelName.xlsx")
sheet = wb['Sheet1']
names=sheet['A'] 

for cellObj in names:
    ordno = str(cellObj.value)
    print(ordno)

    for message in messages:
        subject = message.Subject
        body = message.body
        attachments = message.Attachments

        if str(subject)[:9] == ordno:
            output_dir.mkdir(parents=True, exist_ok=True)
            for attachment in attachments:
                attachment.SaveAsFile(output_dir / str(attachment))
        else:
            pass

start = time()
print(f'Time taken to run: {time() - start} seconds')

我需要提一下,我是 Python 的新手,因此欢迎社区提供任何帮助,尤其是在澄清我做错了什么以及为什么做错之后。

我也读过一些类似的问题,但没有任何帮助,或者至少我不知道如何采用这些方法。

谢谢!

毒蛇

在我看来,您的程序的主要问题是当您只需要遍历邮件并检查它们的主题是否在值列表中时,您有两个嵌套循环(一个在值上,一个在邮件上)。

首先,您需要使用以下内容构建价值列表:

ordno_values = [str(cellObj.value) for cellObj in names]

然后,在您的邮件循环中,您只需要将条件调整为:

if str(subject)[:9] in ordno_values:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

递归函数需要很长时间才能运行

R和Knitr / HTML-处理需要很长时间才能运行的脚本

python将地图转换为列表需要很长时间

Webpack:需要很长时间才能构建

使用Python和SQL Server进行ETL流程需要花费很长时间才能加载

Python Flask服务器需要很长时间才能启动

multiprocess.Queue.get()在python中需要很长时间

解决8难题的BFS的Python实现需要很长时间才能找到解决方案

Python-SocketIO服务器需要很长时间才能触发事件

Django需要很长时间才能加载

Python列表附加需要很长时间?

Python请求很慢,并且需要很长时间才能完成HTTP或HTTPS请求

python:子进程在运行需要较长时间的脚本时不返回任何内容

安装opencv-python-headless需要很长时间

Matlab代码需要很长时间才能运行

程序需要很长时间才能计算........递归(python)

为什么MATLAB作业需要很长时间才能运行?

需要很长时间才能完成的梯度下降算法-效率-Python

更新查询需要很长时间才能运行

在 Python 中绘制图形需要很长时间

在python子进程中使用tail需要很长时间

为什么我的 javascript 需要很长时间才能运行?

Python 多处理需要很长时间才能完成

我的 python 代码需要很长时间才能运行

Python SimpleHTTP Server rfile.readlines() 需要很长时间

Python smtplib ssl 套接字需要很长时间才能创建

R 语言:代码需要很长时间才能运行

Google Apps 脚本需要很长时间(或根本不运行)

SQL 查询需要很长时间才能运行以获得结果