Как отправить кадр данных в виде CSV из памяти с помощью StringIO - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь отправить файл данных pandas в виде CSV-вложения в электронном письме.

Мой код не выдает ошибку. Однако полученное письмо содержит пустое вложение.

Я что-то упустил?

Я использую mailgun api для электронной почты и пробовал следующий код:

from io import StringIO
import pandas as pd

def send_simple_message(a):
    mgurl = 'https://api.mailgun.net/v3/{}/messages'.format('sandboxf04fcce3c4dc46c987c92f3a967e7f9c.mailgun.org')
    auth = ('api', '3701ba6d2b1ad202e76a4322a80c7600-87cdd773-683e02b1')
    files=[("attachment", ("test.csv", a))]
    data = {
        'from': 'Mailgun User <mailgun@{}>'.format('sandboxf04fcce3c4dc46c654c92f3a765e7f9c.mailgun.org'),
        'to': 'user@gmail.com',
        'subject': 'Simple Mailgun Example',
        'text': 'Find attached your CSV'
    }

    response = requests.post(mgurl, auth=auth, data=data, files=files)
    response.raise_for_status()


a = StringI0()

df=pd.DataFrame({'a':[1,2,3],'b':[3,2,1]})

df.to_csv(a)

send_simple_message(a)

1 Ответ

1 голос
/ 14 июня 2019

Метод 1: to_string()

a = StringIO(df.to_string(index=False))

send_simple_message(a)

Метод 2:

Экспортируйте его в csv, затем прочитайте его с помощью функции open, чтобы вы вернули его как str:

df.to_csv('df.csv', index=False)

with open('df.csv') as f:
    lines = [line for line in f]

a = StringIO(' '.join(lines))

send_simple_message(a)

Чтобы проверить, заполнена ли наша переменная a:

pd.read_csv(a)

   a  b
0  1  3
1  2  2
2  3  1
...