将pywintypes.datetime转换为Pandas数据帧



我正试图使用win32com库从共享邮箱下载outlook电子邮件。

我的代码如下:

import win32com.client
import win32com
import pandas as pd
from unidecode import unidecode
import datetime
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders.Item("My Shared Mailbox Name")
inbox = folder.Folders.Item("Inbox")
msg = inbox.Items
subject = []
body = []
sender = []
sendermail = []
senttime = []
for message in msg:
subject.append(message.Subject)
body.append(message.Body)
sender.append(unidecode(message.SenderName))
sendermail.append(unidecode(message.SenderEmailAddress))
senttime.append(message.SentOn)
maildata = pd.DataFrame({'Subject':subject,'Mail Body':body, 'Sender Email Address': sendermail, 'Sender Name': sender, 'Sent Time': senttime})

当我尝试将列表转换为DataFrame时,错误发生在最后一行。

我收到以下错误:

AttributeError: 'pywintypes.datetime' object has no attribute 'nanosecond'

时间是以不同的格式提取的,我习惯于:

pywintypes.datetime(2020, 11, 24, 14, 59, 9, tzinfo=TimeZoneInfo('GMT Standard Time', True))

由于我使用的是win32com库,时间是以pywintypes.datetime格式提取的,我无法将其转换为可以添加到DataFrame的格式。

我环顾四周,似乎win32com库的文档不太好。

我确实找到了Tim Golden的Python内容和一些类似的线程,但这些线程并没有解决问题。我确信它就在我眼前,我无法将2和2放在一起。

如果有人能为我指明如何皈依的正确方向,我将不胜感激。

我知道这只是一个变通方法,但在将pywintypes.datetime转换为pandas datetime之前,您可以将其转换为字符串(并去掉多余的尾随字符(。

message = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(6).Items.GetLast()
pd.to_datetime(str(message.senton)[:-6])

似乎是时区造成了问题。

key_time_var = 'Sent Time' ## The column containing the datetime data
df[key_time_var] = df[key_time_var].dt.tz_convert(None)

这样的东西可以删除时区,然后它应该可以工作

我面临着完全相同的问题。我的解决方案如下:;

d = mail.receivedtime.date()

d将类似于datetime.date(2016, 4, 6(

你也可以得到

t = mail.receivedtime.time()

t将类似于datetime.time(23, 15, 13)

你用这种方式把它们结合起来:

newdate = datetime.datetime.combine(d,t)

然后你就可以得到你想要的了!

我相信这对你来说是一个迟来的答案,但我确实希望它能对其他面临同样问题的人有所帮助!

相关内容

  • 没有找到相关文章

最新更新