如何使用 StringIO 从内存中以 CSV 格式发送数据帧
How to send a dataframe as a CSV from Memory Using StringIO
我正在尝试在电子邮件中将 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)
方法一:to_string()
a = StringIO(df.to_string(index=False))
send_simple_message(a)
方法二:
将它导出到 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
我正在尝试在电子邮件中将 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)
方法一:to_string()
a = StringIO(df.to_string(index=False))
send_simple_message(a)
方法二:
将它导出到 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