如何通过邮件发送Polars DataFrame并展示类似print(df)的输出效果?
如何通过邮件发送Polars DataFrame并展示类似print(df)的输出效果?
嘿,针对你的需求,我给你两个实用的方案,看你更偏向哪种效果~
方案一:纯文本格式发送(完美匹配print(df)的效果)
既然你想要的是和print(df)完全一样的输出效果,那直接把DataFrame转成纯文本字符串发送是最直接的,还能避开你遇到的编码问题。具体步骤很简单:
- 用
str(df)或者df.to_string()把Polars DataFrame转成和控制台打印完全一致的字符串 - 构造邮件时指定
utf-8编码,避免非ASCII字符的编码错误
给你个现成的代码示例:
import polars as pl from email.mime.text import MIMEText import smtplib # 先搞个示例DataFrame(替换成你自己的) df = pl.DataFrame({ "商品名称": ["苹果", "香蕉", "橙子"], "库存数量": [50, 30, 70], "单价": [8.5, 3.2, 5.0] }) # 转成和print(df)一模一样的字符串 df_plain_text = str(df) # 构造纯文本邮件,核心是指定utf-8编码 msg = MIMEText(df_plain_text, 'plain', 'utf-8') msg['Subject'] = "你的Polars DataFrame数据" msg['From'] = "你的邮箱@example.com" msg['To'] = "收件人邮箱@example.com" # 发送邮件(替换成你自己的SMTP服务器配置) with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp_server: smtp_server.login('你的邮箱账号', '你的邮箱密码/授权码') smtp_server.send_message(msg)
这个方案的好处就是完全还原你在控制台看到的DataFrame样子,而且编码问题直接用utf-8解决,不会再出现ascii编码失败的报错。
方案二:修复HTML格式的编码问题(适合想要美观表格的场景)
如果你还是想用HTML格式展示(比如想要带样式的表格),那之前的报错是因为邮件没有用utf-8编码导致的,只需要在构造邮件时指定编码即可。
代码示例:
import polars as pl from great_tables import GT from email.mime.text import MIMEText import smtplib # 示例DataFrame df = pl.DataFrame({ "商品名称": ["苹果", "香蕉", "橙子"], "库存数量": [50, 30, 70], "单价": [8.5, 3.2, 5.0] }) # 用great_tables生成HTML表格 gt_table = GT(df) df_html = gt_table.as_raw_html() # 构造HTML邮件,同样要指定utf-8编码 msg = MIMEText(df_html, 'html', 'utf-8') msg['Subject'] = "你的Polars DataFrame表格(HTML格式)" msg['From'] = "你的邮箱@example.com" msg['To'] = "收件人邮箱@example.com" # 发送邮件 with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp_server: smtp_server.login('你的邮箱账号', '你的邮箱密码/授权码') smtp_server.send_message(msg)
这里的关键就是在MIMEText里明确指定'utf-8'作为编码,这样非ASCII字符就能正常编码发送了,不会再出现之前的报错。
备注:内容来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

