通过Gmail API将CSV文件转换为Pandas df

时间:2020-02-25 16:39:21

标签: python pandas gmail-api google-apis-explorer

我正在尝试通过 Users.messages.attachments:get 方法(1)从Gmail-API导出csv文件,并将其转换为熊猫数据框。我已经有了附件的ID和邮件的ID,一切正常。该文档说附件的主体数据是“作为base64url编码的字符串的一部分”(2),现在我想将csv文件转换为熊猫数据帧。在此post之后,我尝试了以下操作:

[...]

#get the attachment

file = service.users().messages().attachments().get(userId='me', messageId=message_id, id=attachmentId).execute()

#convert the file to a pandas data-frame.

data = file['data']
str_csv = base64.urlsafe_b64decode(data)
df = pd.read_csv(StringIO(str_csv))

print(data)如下所示:

__5CAGUAcgBpAGMAaAB0ACAAegB1ACAAQQB1AGsAdABpAG8AbgBzAGQAYQB0AGUAbgAgAGYA_AByACAASwBhAG0AcABhAGcAbgBlAG4ACgAxAC4AIABKAGEAbgB1AGEAcgAgADIAMAAyADAAIAAtACAAMwAxAC4AIABKAGEAbgB1AGEAcgAgADIAMAAyADAACgBHAGUAcgDkAHQACQBEAG8AbQBhAGkAbgAgAGQAZQByACAAYQBuAGcAZQB6AGUAaQBnAHQAZQBuACAAVQBSAEwACQBBAG4AdABlAGkAbAAgAGEAbgAgAG0A9gBnAGwAaQBjAGgAZQBuACAASQBtAHAAcgBlAHMAcwBpAG8AbgBlAG4ACQDcAGIAZQByAHMAYwBoAG4AZQBpAGQAdQBuAGcAcwByAGEAdABlAAkAUgBhAHQAZQAgAGQAZQBy等...

不幸的是,我收到以下错误消息:

error-message

有人知道我该如何解决这个问题或可以解释为什么它不起作用吗?

(1)参见https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get

(2)参见https://developers.google.com/gmail/api/v1/reference/users/messages/attachments

1 个答案:

答案 0 :(得分:2)

错误的直接原因是base64.urlsafe_b64decode返回一个字节字符串。您必须先对其进行解码,以获取要传递给StringIO的真实字符串:

str_csv = base64.urlsafe_b64decode(data).decode('UTF16')

但是请注意:您显示的编码字符串在解码时会给出:

'Bericht zu Auktionsdaten für Kampagnen\n1. Januar 2020 - 31. Januar 2020\nGerät\tDomain der angezeigten URL\tAnteil an möglichen Impressionen\tÜberschneidungsrate\tRate der'

即:

  • 2条标题
  • 1行包含标签

我认为在送入read_csv之前需要进一步处理(至少跳过一些行并设置分隔符...)