在没有 CSV 的情况下将 CSV 附加到 Python 中的电子邮件

Posted

技术标签:

【中文标题】在没有 CSV 的情况下将 CSV 附加到 Python 中的电子邮件【英文标题】:Attach CSV to email in Python without the CSV 【发布时间】:2021-06-27 14:04:08 【问题描述】:

我已经看到了许多关于通过 Python 在电子邮件中将 CSV 作为附件发送的解决方案。

就我而言,我的 Python 代码需要从雪花视图中提取数据并将其作为 CSV 附件发送给用户组。虽然我知道如何使用 Pandas 数据框中的 to_csv 来做到这一点,但我的问题是:我是否必须在外部创建 CSV 文件?我可以简单地通过 MIMEText 运行 Pandas DF 吗?如果是这样,我在标题中使用什么文件名?

【问题讨论】:

无需在磁盘上创建文件,您可以将数据存储在流中(例如 BytesIO)并将其作为 CSV 文件附加到您的电子邮件中。 “我在标题中使用什么文件名”——任何你想要的。它只是一个字符串,但我建议您附加 .csv 扩展名。 【参考方案1】:

您不必在磁盘上创建临时 CSV 文件,但也不能只是“附加数据帧”,因为它没有指定的在线格式。使用BytesIO 让 Pandas 将 CSV 序列化到内存:

df = pd.DataFrame(...)
bio = io.BytesIO()
df.to_csv(bio, mode="wb", ...)
bio.seek(0)  # rewind the in-memory file

# use the file object wherever a file object is supported
# or extract the binary data with `bio.getvalue()`

【讨论】:

感谢一百万,这将有很大帮助 作为后续,StringIO 最终比 BytesIO 工作得更好 Stringios 和 BytesIOs 是不同的野兽。无论如何,很高兴事情为你解决了:)

以上是关于在没有 CSV 的情况下将 CSV 附加到 Python 中的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不创建架构的情况下将 CSV 文件加载到 BigQuery

如何在没有具体的情况下将 CSV 数据存储在某种数据结构中:C++ 中的列数、列类型等

如何在没有“for xml”子句的情况下将 sql 结果列作为 csv 获取?

Python 3:如何在不保存在磁盘上的情况下将 pandas 数据帧作为 csv 流上传?

将用户信息导出到 CSV - 附加列

如何在不先定义表中的列的情况下将数据加载到 PostgreSQL 中?