如何使用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.StringIODataFrame.to_csv结合使用:

import io

buffer = io.StringIO()

df.to_csv(buffer)

content = buffer.getvalue()

...

以上是关于如何使用exchangelib在python中将熊猫数据框作为电子邮件附件发送的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上的 kivymd 中使用 python 3.8 exchangelib 时出错

Python 之 调用Exchange邮件接口发送邮件

草莓熊python turtle绘图代码

草莓熊python turtle绘图代码(玫瑰花版)附源代码

如何确定熊令牌失败的原因

python - 如何使用pyproj在python中将lat/lon转换为UTM?