如何使用exchangelib在python中将熊猫数据框作为电子邮件附件发送
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用exchangelib在python中将熊猫数据框作为电子邮件附件发送相关的知识,希望对你有一定的参考价值。
我需要使用exchangelib通过电子邮件将熊猫数据框df
作为附件发送。下面是我的代码
import io
attachments=[]
x=io.BytesIO(df.to_records(index=False))
content=x.getvalue()
type(content) #bytes
send_email(account, 'Subject', 'test email', ['testemail.com'],
attachments=attachments)
当我使用上面的代码时,我收到了带有附件的电子邮件,但是它是字节格式的,因此不可读。
这是因为类型(内容)为“字节”
下面的代码工作得很好。这是因为type(content)是“ class'bytes'>”但是我不允许将我的数据框另存为.csv文件。我想直接将数据框作为电子邮件附件发送。如何转换[class'bytes'>“格式的df
并通过csv通过电子邮件发送附件?
attachments = []
with open('test.csv', 'rb') as f:
content = f.read()
type(content) #<class 'bytes'>
attachments.append(('test.csv', content))
下面是我正在使用的send_email
from exchangelib import Configuration, Account, DELEGATE
from exchangelib import Message, Mailbox, FileAttachment
def send_email(account, subject, body, recipients, attachments=None):
"""
Send an email.
Parameters
----------
account : Account object
subject : str
body : str
recipients : list of str
Each str is and email adress
attachments : list of tuples or None
(filename, binary contents)
Examples
--------
"""
to_recipients = []
for recipient in recipients:
to_recipients.append(Mailbox(email_address=recipient))
# Create message
m = Message(account=account,
folder=account.sent,
subject=subject,
body=body,
to_recipients=to_recipients)
# attach files
for attachment_name, attachment_content in attachments or []:
file = FileAttachment(name=attachment_name, content=attachment_content)
m.attach(file)
m.send_and_save()
答案
您可以将io.StringIO
与DataFrame.to_csv
结合使用:
import io
buffer = io.StringIO()
df.to_csv(buffer)
content = buffer.getvalue()
...
以上是关于如何使用exchangelib在python中将熊猫数据框作为电子邮件附件发送的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 上的 kivymd 中使用 python 3.8 exchangelib 时出错