2014-03-14 10 views
7

Im Versuch, E-Mail und laden Sie die Befestigung an meinen eigenen Ordner mit win32com Modul in Python zu lesen, hörte ich auf das Attachment-Objekt am Erhalten:Wie Anlage aus Outlook mit Win32com.client in Python speichern?

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') 

Keines der letzten 4 Zeilen arbeiten ...

>>> 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') hat keinen Fehler, aber es gibt keine solche Datei im Arbeitsverzeichnis. Scheint, dass die Linie einfach ignoriert wurde ...

Konnte jemand helfen? Danke im Voraus!

+0

Sie können wahrscheinlich Ihre Antwort inzwischen akzeptieren :). –

Antwort

2

Wo denken Sie das aktuelle Arbeitsverzeichnis ist? Ich würde sagen, Sie schauen sich den falschen Ordner an, SaveAsFile funktioniert im Allgemeinen gut.

Einfach einen vollständigen Pfad zu SaveAsFile übergeben, das sollte Ihr Problem lösen.

+0

Danke, dass ich es endlich gelöst habe, indem ich sowohl dir als auch den Dateinamen angekündigt habe: att.SaveAsFile (os.getcwd() + '\\ new.xlsx') – lsheng

8

einfach zu aktualisieren, habe ich dieses Problem gelöst, indem sowohl dir und den Dateinamen selbst in SaveAsFile behauptet:

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

Es ist nicht wie die meisten Threads ich hier gesehen habe, sagen, dass Sie müssen nur setzen Pfad darin. Eigentlich werden sowohl der Pfad als auch der Dateiname benötigt.

Auch seltsamerweise müssen Sie os.getcwd() hier setzen, da Python das aktuelle laufende Verzeichnis nicht erkennen würde - in R, nachdem wir Arbeitsverzeichnis mit getwd() gesetzt haben, können wir in jede Datei schreiben dieser Ort.

Prost,

+1

Es ist eine sehr häufige Verwendung des Begriffs "vollständiger Pfad", um "voll" zu implizieren Pfadangabe einschließlich Dateiname ". Die Threads, die du gesehen hast, sind möglicherweise korrekt. :-) –