【问题标题】:Sending data frame as table inside email body python?将数据帧作为电子邮件正文 python 中的表格发送?
【发布时间】:2018-02-25 13:13:37
【问题描述】:

我有一个 csv 文件,我需要将其作为数据帧发送到电子邮件正文中。

但是在我的电子邮件的输出中,我看不到 csv 文件的列,而是将 csv 文件的第一行作为列。

** 这是我的代码:**

import pandas as pd
import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

me = 'myemailaddress@gmail.com'
password = 'password'
server = 'smtp.gmail.com:587'
you = 'myemailaddress@gmail.com'

text = """
Hello, Friend.

Here is your data:

{table}

Regards,

Me"""

html = """
<html>
<head>
<style> 
  table, th, td {{ border: 1px solid black; border-collapse: collapse; }}
  th, td {{ padding: 5px; }}
</style>
</head>
<body><p>Hello, Friend This data is from a data frame.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""

# with open('input.csv') as input_file:
#     reader = csv.reader(input_file)
#     data = list(reader)

data = pd.read_csv("MySampleFile.csv")
text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid"))
html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html"))

message = MIMEMultipart(
    "alternative", None, [MIMEText(text), MIMEText(html,'html')])

message['Subject'] = "First Attempt"
message['From'] = me
message['To'] = you
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()

【问题讨论】:

  • 请张贴您的 csv 文件的快照

标签: python pandas dataframe


【解决方案1】:

看来我所要做的就是将我的 csv 文件中的各个列提取到一个单独的列表中,该列表可以传递到制表方法的 headers 参数中。

这里是完整的解决方案

import pandas as pd
import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

me = 'myemailaddress@gmail.com'
password = 'password'
server = 'smtp.gmail.com:587'
you = 'myemailaddress@gmail.com'

text = """
Hello, Friend.

Here is your data:

{table}

Regards,

Me"""

html = """
<html>
<head>
<style> 
 table, th, td {{ border: 1px solid black; border-collapse: collapse; }}
  th, td {{ padding: 5px; }}
</style>
</head>
<body><p>Hello, Friend This data is from a data frame.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""

# with open('input.csv') as input_file:
#     reader = csv.reader(input_file)
#     data = list(reader)

df = pd.read_csv("MySampleFile.csv")
col_list = list(df.columns.values)
data = df
# above line took every col inside csv as list
text = text.format(table=tabulate(data, headers=col_list, tablefmt="grid"))
html = html.format(table=tabulate(data, headers=col_list, tablefmt="html"))

message = MIMEMultipart(
    "alternative", None, [MIMEText(text), MIMEText(html,'html')])

message['Subject'] = "First Attempt"
message['From'] = me
message['To'] = you
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()

【讨论】:

  • 这是一个很好的卡尔。像魅力一样工作。 +1
猜你喜欢
  • 1970-01-01
  • 2016-11-11
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2013-10-04
  • 2018-05-06
相关资源
最近更新 更多