Je veux obtenir une table qui se trouve dans le corps d'un fichier .msg avec Python. Je peux obtenir le contenu du corps, mais j'ai besoin de la table séparée en dataframe, par exemple.
Je peux obtenir le contenu du corps, mais je ne peux pas séparer la table du corps
import win32com.client import os dir = r"C:\Users\Murilo\Desktop\Emails\030" file_list = os.listdir(dir) for file in file_list: if file.endswith(".msg"): outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") msg = outlook.OpenSharedItem(dir + "/" + file) print(msg.Body)
3 Réponses :
Je regarderais la bibliothèque extract_msg. Il devrait vous permettre d'ouvrir un fichier .msg en tant que XML brut et être très facile d'extraire une table du contenu.
msg = extract_msg.Message(fileLoc) msg_message = msg.body content = ('Body: {}'.format(msg_message))
S'il s'agit d'un tableau HTML, utilisez MailItem.HTMLBody
(au lieu du texte brut Body
) et extrayez le tableau du HTML.
Merci! Je l'ai utilisé et fonctionne parfaitement avec Pandas (read_html). Cela crée une liste de dataframes qui contient toutes les tables sur le corps de l'e-mail. Chaque élément de la liste est une trame de données d'une table sur le corps. données = pd.read_html (msg.HTMLBody)
Le modèle d'objet Outlook propose trois méthodes principales pour travailler avec les corps d'élément:
Voir Chapitre 17: Travailler avec Item Bodies pour plus d'informations.
Mais je pense que le moyen le plus simple et le plus propre est d'utiliser le modèle d'objet Word. Vous pouvez en savoir plus sur la gestion du modèle d'objet Word et sur son utilisation pour extraire le contenu de la table dans le Comment lire le contenu d'une table dans un fichier MS-Word en utilisant Python? post.