重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
如何用Python自動生成報表以郵件發送,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于做網站、成都網站制作、文縣網絡推廣、微信小程序、文縣網絡營銷、文縣企業策劃、文縣品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯為所有大學生創業者提供文縣建站搭建服務,24小時服務熱線:13518219792,官方網址:www.cdcxhl.com
數據分析師肯定每天都被各種各樣的數據數據報表搞得焦頭爛額,老板的,運營的、產品的等等。而且大部分報表都是重復性的工作,這篇文章就是幫助大家如何用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-8 import pymysql as pms import openpyxl import datetime from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header import 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: #找到你的發送郵箱的看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯的支持。
本文題目:如何用Python自動生成報表以郵件發送
本文網址:http://www.xueling.net.cn/article/ieijdg.html