Конвертируйте CSV-файл в Pandas df через Gmail API - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь экспортировать csv-файл из Gmail-API с помощью метода Users.messages.attachments: get (1) и преобразовать его в pandas фрейм данных. У меня уже есть идентификатор вложения и идентификатор сообщения, и все работает нормально. В документации говорится, что данные тела вложения являются «частью как закодированная в base64url строка» (2), и теперь я хотел бы преобразовать csv-файл в pandas фрейм данных. После этой записи я попробовал следующее:

[...]

#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 Ответ

2 голосов
/ 25 февраля 2020

Непосредственной причиной ошибки является то, что 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 (хотя бы пропустить несколько строк и установить разделитель ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...