自動發送郵件腳本
這段時間在對流量部門提供數據方面的支持,把每天自動發送郵件的腳本講一講吧,雖然很基礎,好像沒什麼可以說的 ...
在日常運營工作中,數據提取人員面對眾多業務方的數據需求,往往應接不暇。他們需要一套自動化的程序去幫助他們完成一些周期性和重複性較強的工作。
為了減少重複性工作,數據提取人員可以使用Python自動化腳本跑定時任務。將寫好的HQL語句放入Python腳本中,並在linux伺服器上設置crontab定時調度任務,保證每天定時自動從數據倉庫提取數據完畢後,將結果集寫到excel中並發送郵件到數據需求方的郵箱。Python腳本代碼執行如下
#coding: utf-8search_data = """ 創建臨時表查詢昨日運營數據"""report_data = select * from 上一步創建的臨時表 import psycopg2import smtplibimport osimport openpyxlimport datetimefrom impala.dbapi import connectfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImageimport pyhs2 # HIVE環境wb = openpyxl.load_workbook(/home/path/username/daily_report_v1.xlsx) # 打開伺服器存儲路徑下的excel文件# 連接HIVE環境impala_conn = pyhs2.connect(host=10.xx.xx.xx, port=xxx, authMechanism="PLAIN", user=username, password=password, database=dwd)seo_h5_1 = impala_conn.cursor()h5_result = impala_conn.cursor()seo_h5_1.execute(SET mapreduce.job.queuename=root.yydata)seo_h5_1.execute(search_data) # 執行HQL語句# 取出來數據h5_result.execute(report_data) # 取出來數據h5_result = h5_result.fetchall()#放到sheet裡面去sheet = wb.get_sheet_by_name(daily_report) #daily_report表#清除歷史數據for i in range(2,sheet.max_row + 1 ): for j in range(1,sheet.max_column + 1 ): sheet.cell(row=i,column=j).value = #填充結果數據for i in range(2,len(h5_result) + 2 ): for j in range(1,len(h5_result[i-2]) + 1 ): sheet.cell(row=i,column=j).value = h5_result[i-2][j-1]#關閉HIVE鏈接impala_conn.close()wb.save(/home/path/usernamet/daily_report_v1.xlsx) # 保存excel文件receiver = receiver_email@xxx.com # 收件人郵箱地址date_str = datetime.datetime.strftime(datetime.date.today()-datetime.timedelta(days=1),%m%d)mail_txt = """Dear All, 附件是運營日報,請查收。"""msgRoot = MIMEMultipart(mixed)msgRoot[Subject] = unicode(u日報-%s % date_str) #添加日期msgRoot[From] = sender_email@xxx.commsgRoot[To] = receivermsgRoot["Accept-Language"]="zh-CN"msgRoot["Accept-Charset"]="ISO-8859-1,utf-8"msg = MIMEText(mail_txt,plain,utf-8)msgRoot.attach(msg)att = MIMEText(open(/home/path/usernamet/daily_report_v1.xlsx, rb).read(), base64, utf-8)att["Content-Type"] = application/octet-streamatt["Content-Disposition"] = attachment; filename="日報2017%s.xlsx" % date_strmsgRoot.attach(att)smtp = smtplib.SMTP()smtp.connect(mail.address.com)smtp.login(sender_email@xxx.com, sender_password)for k in receiver.split(,): smtp.sendmail(receiver_email@xxx.com, k, msgRoot.as_string())smtp.quit()
將上面的python腳本後放入連接到數據倉庫的伺服器上,在linux下設置crontab調度語句,如「10 16 * * * python /home/path/username/auto_email.py」表示每天下午16點10分執行/home/ path/username/路徑下的auto_email.py文件。
執行代碼後,程序將自動執行SQL語句連接到資料庫提取數據,提數完畢後將數據寫入excel文件中,並自動發送郵件到數據需求方郵箱。
這樣通過定時調度的腳本即可解決業務方每天對日報數據的需求,將數據提取人員從繁重的機械性勞動中解放出來
推薦閱讀:
※如何用python的sklearn的機器學習,實現簡單線性回歸分析?
※胡說江湖 2017 年 03 月 08 日的文章
※再戰『沃+』,百萬孵化獎金等你來拿!
※用python建立房價預測模型|python數據分析建模實例
※數據分析驅動業績增長