我有一个分析项目要求我提取PDF的“当前状态”,其中包含我们每天发送4次的报告。我编写的代码用于抓取我的PDF,但我需要弄清楚如何从电子邮件中提取PDF,以便我可以使用我的代码逐步完成。
我尝试使用以下代码
import win32com.client
import os
location = r'C:\Users\myusername\OneDrive - companyinfo\Department Projects\TestEmails'
files = [f for f in os.listdir(location)]
print(files)
for file in files:
if file.endswith('.msg'):
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
msg = outlook.OpenSharedItem(file)
att = msg.Attachments
for i in att:
i.SaveAsFil`e(os.path.join(r'C:\Users\username\OneDrive - companyname\Department Projects\TestPDF', i.FileName))
它产生的错误是:
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, u'Microsoft Outlook', u"We can't open 'Stats Report.msg'. It's possible the file is already open, or you don't have permission to open it.\n\nTo check your permissions, right-click the file folder, then click Properties.", None, 0, -2147287038), None)
我目前只测试一个已保存的test.msg文件,但我需要解析1400多个文件。也许这不是最好的技术,因为我知道VBA可以在前景中做类似的事情,但我在VBA区域没有太多技能。
我在运行python 2.7的Windows 7计算机上安装了Outlook 2016。这个错误容易修复吗?有没有更好的技术来获取附加的PDF并将其保存到文件夹,以便我的其他程序可以获取必要的数据?
所需的输出:PDF附件被提取并保存到单独的文件夹中。
感谢您的帮助和专业知识,
安迪
答案 0 :(得分:0)
所以我想出了答案,它是多么简单和愚蠢让我无理受挫.......
我的工作目录错了,即使我抓住了文件,文件名是唯一创建的项目。
我创建了一个true_location变量,它给了它真正的完整工作目录,它就像一个魅力。
true_location = location + '\\' + file
在if子句下的for循环中输入它,它就像魅力一样。
最佳,
安迪