【问题标题】:How to save dataframe value in excel/csv如何在 excel/csv 中保存数据框值
【发布时间】:2022-06-13 15:01:49
【问题描述】:

我正在尝试将 Outlook 电子邮件正文内容保存到数据框,然后保存到 csv/excel,我们通常以表格格式从供应商处获取不同索引的价格,我尝试使用 Body_content = message.HTMLBody 但没有按预期工作。

因此,我可以使用 Body_content = message.Body 并打印 (df.To_string())。现在下一步是将这些值存储在 excel 表中,即使它是由以下格式的分析人员打开的。

我们不断从不同的供应商那里获得指数价格,如果这一个完美运行,我也会对其他供应商采用相同的方法。

输出

这就是它最终获得单列数据帧的方式

import pandas as pd
import win32com.client
import re
import os
import pandas

import datetime
from datetime import date

EMAIL_ACCOUNT = 'lakshmi@NY.com'
EMAIL_SUBJ_SEARCH_STRING = 'MSBPSCSP Index Price'
EMAIL_CONTNT = {'Ticker': [], 'TickerLevel': [], 'DATE': []}

out_app = win32com.client.gencache.EnsureDispatch("Outlook.Application")
out_namespace = out_app.GetNamespace("MAPI")
#lastWeekDateTime = dt.datetime.now() - dt.timedelta(days=1)
#lastWeekDateTime = lastWeekDateTime.strftime('%m/%d/%Y %H:%M %p')


root_folder = out_namespace.GetDefaultFolder(6)

out_iter_folder = root_folder.Folders['Email_Snapper']

#char_length_of_search_substring = len(EMAIL_SUBJ_SEARCH_STRING)



item_count = out_iter_folder.Items.Count

Flag = False
cnt = 1
if item_count > 0:
    for i in range(item_count, 0, -1):

        message = out_iter_folder.Items[i]
        if EMAIL_SUBJ_SEARCH_STRING in message.Subject:
            #message = message.Restrict("[ReceivedTime] >= '" + lastWeekDateTime + "'")

            Body_content = message.Body
Body_content = Body_content[:Body_content.find("Disclaimer")].strip()
df = pd.DataFrame([Body_content])
print(df.to_string())

最终目标是将这些价格插入到 oracle 数据库中,方法是先将它们保存在 excel 中,或者如果可能的话直接从数据框中(这更好)

【问题讨论】:

  • "我尝试使用 Body_content = message.HTMLBody 但没有按预期工作" ... html 中是否有表格标签(例如 )?电子邮件是以纯文本还是 HTML 格式到达的?

标签: python pandas dataframe outlook win32com


【解决方案1】:

您可以将dataFrame 导出到excel

df.to_excel("output.xlsx", index=False)

或 CSV -

df.to_excel("output.csv", index=False)

【讨论】:

  • 感谢 ahmed,是否可以只保存数据框中的特定值,例如 A 列中的 MSBPSCSSP、B 列中的日期和 C 列中的价格
  • 是的,df.date 将仅返回日期列,df[['date']].to_excel() 将仅保存该列值
【解决方案2】:

Outlook 对象模型支持三种主要的自定义或获取邮件正文的方式:

  1. Body 属性返回或设置表示 Outlook 项目的明文正文的字符串。
  2. MailItem 类的HTMLBody 属性返回或设置表示指定项的 HTML 正文的字符串。设置HTMLBody 属性将始终立即更新Body 属性。例如:
     Sub CreateHTMLMail() 
       'Creates a new e-mail item and modifies its properties. 
       Dim objMail As Outlook.MailItem 
       'Create e-mail item 
       Set objMail = Application.CreateItem(olMailItem) 
       With objMail 
        'Set body format to HTML 
        .BodyFormat = olFormatHTML 
        .HTMLBody = "<HTML><BODY>Enter the message <a href="http://google.com">text</a> here. </BODY></HTML>" 
        .Display 
       End With 
     End Sub
  1. Word 对象模型可用于处理消息体。有关更多信息,请参阅Chapter 17: Working with Item Bodies。因此,您可以使用 Word 对象模型获取所需的信息。

选择哪种方式由您决定。但我想 Word 对象模型可以帮助您提取所需的信息。

【讨论】:

  • 是不是和vba关系更密切?
  • 谁能帮我建议更改代码?
  • @RahulVaidya VBA 可以直接移植到 Python,使用 win32com。对象、方法和属性是相同的,因为它们来自同一个对象模型。
猜你喜欢
  • 2022-01-05
  • 2022-08-12
  • 2020-06-15
  • 1970-01-01
  • 2020-12-09
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
相关资源
最近更新 更多