簡體   English   中英

提取 HTML 表數據從 email 到 csv 文件,第一列值到行標題,使用 ZA7F5F35426B928727111

[英]Extracting HTML table data from email to csv file, 1st column values to row headers, using Python

我正在嘗試通讀 outlook 文件夾並獲取 ReceivedTime,CC,Subject,HTMLBody 但將表格提取到列中。 我可以將 1) ReceivedTime,CC,Subject,HTMLBody 拉到 dataframe 中,我可以這樣做 2) 將 HTMLBody 表提取到 dataframe 中,但我無法同時執行 1) 和 2)。

當前代碼:

import win32com.client
import pandas as pd
from bs4 import BeautifulSoup


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

inbox = mapi.Folders[User@email.com'].Folders['Inbox'].Folders['Subfolder Name']
Mail_Messages = inbox.Items

for mail in Mail_Messages:
     receivedtime = mail.ReceivedTime.strftime('%Y-%m-%d %H:%M:%S')
     cc = mail.CC
     body = mail.HTMLBody
     html_body = BeautifulSoup(body,"lxml")
     html_tables = html_body.find_all('table')[0]

df = pd.read_html(str(html_tables),header=None)[0]
display(df)

當前數據框顯示如下。 但我也想要相關的 ReceivedTime、CC 和主題。

0 1
0 報告名稱 報告.pdf
1 隊名 A組
2 項目名稱 項目A
3 唯一 ID 號 123456789
4 截止日期 2021 年 1 月 1 日

但希望列 [0] 改為行標題。 因此,當每個 email 被讀取時,它會為收件箱子文件夾中的所有電子郵件生成一個看起來像這樣的 dataframe:

0 報告名稱 隊名 項目名稱 唯一 ID 號 截止日期 接收時間 抄送 主題
1 報告.pdf A組 項目A 123456789 2021 年 1 月 5 日 2021 年 1 月 1 日凌晨 4 點 38 分 44 秒 用戶1@email.com,用戶2@email.com 需要采取的行動:報告 A 即將到期
2
3
4

但是我被卡住了,仍然是一個初學者pythoner,但我看到的所有其他帖子並沒有完全讓我明白我正在嘗試做的事情。 我很感激這方面的任何幫助。

嘗試這個:

import win32com.client
import pandas as pd
from bs4 import BeautifulSoup
from pprint import pprint

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

inbox = mapi.Folders['User@email.com'].Folders['Inbox'].Folders['Subfolder Name']
Mail_Messages = inbox.Items

# a list where contents of each e-mail - CC, receiv.time and subject will have been put
contents = []
column_names = ['Report Name', 'Team Name', 'Project Name', 'Unique ID Number', 'Due Date', 'ReceivedTime', 'CC', 'Subject']

for mail in Mail_Messages:

    body = mail.HTMLBody
    html_body = BeautifulSoup(body, "lxml")
    html_tables = html_body.find_all('table')

    # uncomment following lines if you want to have column names defined programatically rather than hardcoded
    # column_names = pd.read_html(str(html_tables), header=None)[0][0]
    # column_names = column_names.tolist()
    # column_names.append("CC")
    # column_names.append("Received Time")
    # column_names.append("Subject")

    # a list containing a single e-mail data - html table, CC, receivedTime and subject
    row = pd.read_html(str(html_tables), header=None)[0][1]
    row = row.tolist()
    row.append(mail.CC)
    row.append(mail.ReceivedTime.strftime('%Y-%m-%d %H:%M:%S'))
    row.append(mail.Subject)

    # appending each full row to a list
    contents.append(row)


# and finally converting a list into dataframe
df = pd.DataFrame(contents, columns=column_names)

pprint(df)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM