在用Python编写的Html格式的电子邮件中,禁止在数值输出中使用科学符号



Hi我有一个数据帧,它有3列。我想在对文本和html进行html格式化后,在邮件中发送这些数据。我在电子邮件中收到了科学记数法中的一个列值(1.53481e+07(。我使用round((函数将数据帧中的值存储为十进制数。我需要在邮件输出中显示为十进制数(153481.07(,而不是科学记数法。请帮忙。我正在使用以下代码

import datetime
import psycopg2 as pg
from tabulate import tabulate
import smtplib
import pandas as pd
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# Write Query and Connect to Redshift Database
connection = pg.connect(dbname= '<dbname>', host = '<host>', port= '5439', user= '<user_name>', password='<password>')
cursor = connection.cursor()
cursor.execute("""select 'Exec Dash Revenue' as Metric_Name,SUBSTRING(ptn_dateid_pacific,1,6) as MthYr , sum(grossrev) +sum(shippingrev) + sum(discount) as Metric_value  from dw_bo.f_order_component_mart
where  hierlevel1 not in ('OTHER', 'Progal', 'Discount', 'Shipping', 'Dummy Discount', 'Gift Card', 'Unassigned') and prodsku_base not in ('UNALLOCATED','TP|UNALLOCATED') and experience in ('WEB', 'APP') and orderstatus in ('W_UPLOAD'
, 'W_PAYMENT_VER'
, 'PAYMENT_VER_REQD'
, 'READY'
, 'CONVTED_TO_JOBS'
, 'INT_PROC'
, 'DONE_INT_PROC'
, 'SENT'
, 'RECEIVED'
, 'PROCESSING'
, 'DONE_PROCESSING'
, 'FULFILLED'
, 'FINAL_PROC'
, 'DONE_FINAL_PROC'
, 'INVOICED'
, 'PAYMENT_REQD'
, 'PAID'
)and ptn_dateid_pacific >= 20200301 and ptn_dateid_pacific <= 20200310 group by 1,2""")
data = pd.DataFrame(cursor.fetchall())
data[2]=data[2].round(2)
data.index = data.index + 1
cursor.close
connection.close()

text = """
Hello, Friends.
Here is your data:
{table}
Regards,
(name)"""
html = """
<html>
<head>
<style> 
table, th, td {{ border: 1px solid black; border-collapse: collapse; }}
th, td {{ padding: 5px; }}
</style>
</head>
<body><p>Hello, Friends</p>
<p>Here is your Report:</p>
{table}
<p>Regards,</p>
<p>(name)</p>
</body></html>
"""
# Set up E-mail
date = datetime.datetime.now()
date = date.strftime('%a %b %d')
fromaddr = '<from_email_address>'
toaddr = ['<to_email_address>']
col_list = ['Metric_Name','MthYr','Metric_value']
text = text.format(table=tabulate(data, headers=col_list, tablefmt="grid"))
html = html.format(table=tabulate(data, headers=col_list, tablefmt="html"))

#html = str(data_html) % data_html
msg = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html,'html')])
msg['From'] = fromaddr
msg['To'] = ', '.join(toaddr)
msg['Subject'] = 'Recon Report - ' + date
server = smtplib.SMTP('smtp.outlook.com', 587)
server.ehlo()
server.starttls()
server.login(fromaddr, '<password>')
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()```

data = pd.DataFrame(cursor.fetchall())
data[2]="%.2f" % (data[2])

最新更新