2014-03-14 105 views
7

我試着去閱讀電子郵件和附件下載使用win32com模塊在Python我自己的文件夾,我停在獲取安裝對象:如何使用win32com.client在Python中保存來自Outlook的附件?

from win32com.client import Dispatch 
import datetime as date 

outlook = Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder("6") 
all_inbox = inbox.Items 
val_date = date.date.today() 

sub_today = 'Hi' 
att_today = 'Attachment.xlsx' 
for msg in all_inbox: 
    if msg.Subject == sub_today: 
     break 

for att in msg.Attachments: 
    if att.FileName == att_today: 
     break 

att.SaveAsFile('new.xlsx') 
att.ExtractFile('new.xlsx') 
open(att)  
att.WriteToFile('x') 

最後4行工作的無...

>>> att.ExtractFile('new.xlsx') 
raise AttributeError("%s.%s" % (self._username_, attr)) 
AttributeError: <unknown>.ExtractFile 

>>> open(att) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: coercing to Unicode: need string or buffer, instance found 

>>> att.WriteToFile('x') 
raise AttributeError("%s.%s" % (self._username_, attr)) 
AttributeError: <unknown>.WriteToFile 

att.SaveAsFile('new.xlsx')沒有錯誤,但工作目錄中沒有這樣的文件。似乎該行被忽略...

任何人都可以幫忙嗎?提前致謝!

+0

你現在可以接受你的答案:)。 –

回答

2

你在哪裏認爲當前工作目錄是?我會說你正在看錯文件夾,SaveAsFile一般工作得很好。

只需傳遞SaveAsFile的完整路徑,即可解決您的問題。

+0

謝謝我最終通過宣佈目錄和文件名解決了它:att.SaveAsFile(os.getcwd()+'\\ new.xlsx') – lsheng

8

只是爲了更新,我已經奪走目錄和文件名本身在SaveAsFile解決了這個問題:

att.SaveAsFile(os.getcwd() + '\\new.xlsx') 

它不是像大多數線程我在這裏看到說你只需要放在它的路徑。實際上,路徑和文件名都是必需的。另外,奇怪的是,你必須把os.getcwd()放在這裏,因爲Python不會識別當前運行的目錄 - 在R中,當我們用getwd()設置工作目錄後,我們可以寫入任何文件這個位置。

乾杯,

+1

這是非常常用的術語「完整路徑」暗示「完整包括文件名的路徑規範「。你看到的線程可能是正確的。 :-) –

相關問題