电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何使用Python自動生成報表并以郵件發送

瀏覽:2日期:2022-07-08 10:21:35

數據分析師肯定每天都被各種各樣的數據數據報表搞得焦頭爛額,老板的,運營的、產品的等等。而且大部分報表都是重復性的工作,這篇文章就是幫助大家如何用Python來實現報表的自動發送,解放你的勞動力,可以讓你有時間去做更有意思的事情。

首先來介紹下實現自動報表要使用到的Python庫:

pymysql 一個可以連接MySQL實例并且實現增刪改查功能的庫datetime Python標準庫中自帶的關于時間的庫openpyxl 一個可以讀寫07版以后的Excel文檔(.xlsx格式也支持)的庫smtplib SMTP即簡單郵件傳輸協議,Python簡單封裝成了一個庫email 一個用來處理郵件消息的庫為什么使用openpyxl庫來處理Excel呢?因為它支持每個sheet的行數為100W+,也是支持xlsx格式的文件。如果你接受xls文件,并且每個sheet的行數小于6W,也是可以使用xlwt庫,它對大文件的讀取速度要大于openpyxl。

接下來我們就進入實戰部分,來正式實現這個過程。我把整個實現過程分成幾個函數的方式來實現,這樣看著會比較有結構感。

一、首先導入所有要用到的庫

# encoding=utf-8import pymysql as pmsimport openpyxlimport datetimefrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerimport smtplib

二、 編寫一個傳入sql就返回數據的函數get_datas(sql)

def get_datas(sql): # 一個傳入sql導出數據的函數 # 跟數據庫建立連接 conn = pms.connect(host=’實例地址’, user=’用戶’, passwd=’密碼’, database=’庫名’, port=3306, charset='utf8') # 使用 cursor() 方法創建一個游標對象 cursor cur = conn.cursor() # 使用 execute() 方法執行 SQL cur.execute(sql) # 獲取所需要的數據 datas = cur.fetchall() #關閉連接 cur.close() #返回所需的數據 return datas

三、 編寫一個傳入sql就返回數據的字段名稱的函數get_datas(sql),因為一個函數只能返回一個值,這邊就用2個函數來分別返回數據和字段名稱(也就是excel里的表頭)

def get_fields(sql): # 一個傳入sql導出字段的函數 conn = pms.connect(host=’rm-rj91p2yhl9dm2xmbixo.mysql.rds.aliyuncs.com’, user=’bi-analyzer’, passwd=’pcNzcKPnn’, database=’kikuu’, port=3306, charset='utf8') cur = conn.cursor() cur.execute(sql) # 獲取所需要的字段名稱 fields = cur.description cur.close() return fields

四、 編寫一個傳入數據、字段名稱、存儲地址返回一個excel 的函數et_excel(data, field, file)

def get_excel(data, field, file): # 將數據和字段名寫入excel的函數 #新建一個工作薄對象 new = openpyxl.Workbook() #激活一個新的sheet sheet = new.active #給sheet命名 sheet.title = ’數據展示’ #將字段名稱循環寫入excel第一行,因為字段格式列表里包含列表,每個列表的第一元素才是字段名稱 for col in range(len(field)): #row代表行數,column代表列數,value代表單元格輸入的值,行數和列數都是從1開始,這點于python不同要注意 _ = sheet.cell(row=1, column=col+1, value=u’%s’ % field[col][0]) #將數據循環寫入excel的每個單元格中 for row in range(len(data)): for col in range(len(field)): #因為第一行寫了字段名稱,所以要從第二行開始寫入 _ = sheet.cell(row=row+2, column=col + 1, value=u’%s’ % data[row][col]) #將生成的excel保存,這步是必不可少的 newworkbook = new.save(file) #返回生成的excel return newworkbook

五、 編寫一個自動獲取昨天日期字符串格式的函數getYesterday()

def getYesterday(): # 獲取昨天日期的字符串格式的函數 #獲取今天的日期 today = datetime.date.today() #獲取一天的日期格式數據 oneday = datetime.timedelta(days=1) #昨天等于今天減去一天 yesterday = today - oneday #獲取昨天日期的格式化字符串 yesterdaystr = yesterday.strftime(’%Y-%m-%d’) #返回昨天的字符串 return yesterdaystr

六、編寫一個生成郵件的函數create_email(email_from, email_to, email_Subject, email_text, annex_path, annex_name)

def create_email(email_from, email_to, email_Subject, email_text, annex_path, annex_name): # 輸入發件人昵稱、收件人昵稱、主題,正文,附件地址,附件名稱生成一封郵件 #生成一個空的帶附件的郵件實例 message = MIMEMultipart() #將正文以text的形式插入郵件中 message.attach(MIMEText(email_text, ’plain’, ’utf-8’)) #生成發件人名稱(這個跟發送的郵件沒有關系) message[’From’] = Header(email_from, ’utf-8’) #生成收件人名稱(這個跟接收的郵件也沒有關系) message[’To’] = Header(email_to, ’utf-8’) #生成郵件主題 message[’Subject’] = Header(email_Subject, ’utf-8’) #讀取附件的內容 att1 = MIMEText(open(annex_path, ’rb’).read(), ’base64’, ’utf-8’) att1['Content-Type'] = ’application/octet-stream’ #生成附件的名稱 att1['Content-Disposition'] = ’attachment; filename=’ + annex_name #將附件內容插入郵件中 message.attach(att1) #返回郵件 return message

七、 生成一個發送郵件的函數send_email(sender, password, receiver, msg)

def send_email(sender, password, receiver, msg): # 一個輸入郵箱、密碼、收件人、郵件內容發送郵件的函數 try: #找到你的發送郵箱的服務器地址,已加密的形式發送 server = smtplib.SMTP_SSL('smtp.mxhichina.com', 465) # 發件人郵箱中的SMTP服務器 server.ehlo() #登錄你的賬號 server.login(sender, password) # 括號中對應的是發件人郵箱賬號、郵箱密碼 #發送郵件 server.sendmail(sender, receiver, msg.as_string()) # 括號中對應的是發件人郵箱賬號、收件人郵箱賬號(是一個列表)、郵件內容 print('郵件發送成功') server.quit() # 關閉連接 except Exception: print(traceback.print_exc()) print('郵件發送失敗')

八、建立一個main函數,把所有的自定義內容輸入進去,最后執行main函數

def main(): print(datetime.datetime.now()) my_sql = sql = 'SELECT a.id ’用戶ID’, a.gmtCreate ’用戶注冊時間’, af.lastLoginTime ’最后登錄時間’, af.totalBuyCount ’歷史付款子單數’, af.paidmountUSD ’歷史付款金額’, af.lastPayTime ’用戶最后支付時間’ FROM table a LEFT JOIN tableb af ON a.id= af.accountId ;' # 生成數據 my_data = get_datas(my_sql) # 生成字段名稱 my_field = get_fields(my_sql) # 得到昨天的日期 yesterdaystr = getYesterday() # 文件名稱 my_file_name = ’user attribute’ + yesterdaystr + ’.xlsx’ # 文件路徑 file_path = ’D:/work/report/’ + my_file_name # 生成excel get_excel(my_data, my_field, file_path) my_email_from = ’BI部門自動報表機器人’ my_email_to = ’運營部’ # 郵件標題 my_email_Subject = ’user’ + yesterdaystr # 郵件正文 my_email_text = 'Dear all,nt附件為每周數據,請查收!nnBI團隊 ' #附件地址 my_annex_path = file_path #附件名稱 my_annex_name = my_file_name # 生成郵件 my_msg = create_email(my_email_from, my_email_to, my_email_Subject, my_email_text, my_annex_path, my_annex_name) my_sender = ’阿里云郵箱’ my_password = ’我的密碼’ my_receiver = [10001@qq.com’]#接收人郵箱列表 # 發送郵件 send_email(my_sender, my_password, my_receiver, my_msg) print(datetime.datetime.now())if __name__ == '__main__': main();

以上就是如何使用Python自動生成報表并以郵件發送的詳細內容,更多關于python 生成報表郵件發送的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 北京开源多邦科技发展有限公司官网 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 北京签证代办_签证办理_商务签证_旅游签证_寰球签证网 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 外贸资讯网 - 洞悉全球贸易,把握市场先机| 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 湖南教师资格网-湖南教师资格证考试网| 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 首页 - 军军小站|张军博客 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 儿童语言障碍训练-武汉优佳加感统文化发展有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 全国国际学校排名_国际学校招生入学及学费-学校大全网 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 |