6個(gè)Python辦公黑科技,助你提升工作效率
應(yīng)用場(chǎng)景:簡(jiǎn)歷內(nèi)推(解析內(nèi)容:包括不限于姓名、郵箱、電話(huà)號(hào)碼、學(xué)歷等信息)
輸入:要解析的文件路徑
輸出:需要解析的內(nèi)容(點(diǎn)我主頁(yè),詳見(jiàn)歷史文章)
環(huán)境準(zhǔn)備:python 3.6 、mac(下文中doc轉(zhuǎn)docx是mac寫(xiě)法,windows更簡(jiǎn)單,導(dǎo)入win32的包即可)
依賴(lài)包:
# encoding: utf-8import os, sysfrom pdfminer.pdfparser import PDFParserfrom pdfminer.pdfdocument import PDFDocumentfrom pdfminer.pdfpage import PDFPagefrom pdfminer.pdfinterp import PDFResourceManagerfrom pdfminer.pdfinterp import PDFPageInterpreterfrom pdfminer.layout import LAParamsfrom pdfminer.converter import PDFPageAggregator二、發(fā)送郵件
有幾個(gè)模塊用于訪(fǎng)問(wèn)互聯(lián)網(wǎng)以及處理網(wǎng)絡(luò)通信協(xié)議。其中最簡(jiǎn)單的兩個(gè)是用于處理從 urls 接收的數(shù)據(jù)的 urllib.request 以及用于發(fā)送電子郵件的 smtplib:
import smtplibsmtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說(shuō)明:
host: SMTP 服務(wù)器主機(jī)。 你可以指定主機(jī)的ip地址或者域名如: runoob.com,這個(gè)是可選參數(shù)。
port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號(hào),一般情況下 SMTP 端口號(hào)為25。
local_hostname: 如果 SMTP 在你的本機(jī)上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP 對(duì)象使用 sendmail 方法發(fā)送郵件,語(yǔ)法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
參數(shù)說(shuō)明:
from_addr: 郵件發(fā)送者地址。 to_addrs: 字符串列表,郵件發(fā)送地址。 msg: 發(fā)送消息案例:
#!/usr/bin/python# -*- coding: UTF-8 -*- import smtplibfrom email.mime.text import MIMETextfrom email.header import Header sender = ’[email protected]’# 西紅柿微:ZPYDWXYreceivers = [’[email protected]’] # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱 # 三個(gè)參數(shù):第一個(gè)為文本內(nèi)容,第二個(gè) plain 設(shè)置文本格式,第三個(gè) utf-8 設(shè)置編碼message = MIMEText(’Python 郵件發(fā)送測(cè)試...’, ’plain’, ’utf-8’)message[’From’] = Header('不吃西紅柿', ’utf-8’) # 發(fā)送者message[’To’] = Header('測(cè)試', ’utf-8’)# 接收者 subject = ’Python SMTP 郵件測(cè)試’message[’Subject’] = Header(subject, ’utf-8’) try: smtpObj = smtplib.SMTP(’localhost’) smtpObj.sendmail(sender, receivers, message.as_string()) print '郵件發(fā)送成功'except smtplib.SMTPException: print 'Error: 無(wú)法發(fā)送郵件'三、操作execl1. 關(guān)聯(lián)公式:Vlookup
vlookup是excel幾乎最常用的公式,一般用于兩個(gè)表的關(guān)聯(lián)查詢(xún)等。所以我先把這張表分為兩個(gè)表。
#查看訂單明細(xì)號(hào)是否重復(fù),結(jié)果是沒(méi)。df1['訂單明細(xì)號(hào)'].duplicated().value_counts()df2['訂單明細(xì)號(hào)'].duplicated().value_counts()df_c=pd.merge(df1,df2,on='訂單明細(xì)號(hào)',how='left')2. 數(shù)據(jù)透視表
需求:想知道每個(gè)地區(qū)的業(yè)務(wù)員分別賺取的利潤(rùn)總和與利潤(rùn)平均數(shù)。
pd.pivot_table(sale,index='地區(qū)名稱(chēng)',columns='業(yè)務(wù)員名稱(chēng)',values='利潤(rùn)',aggfunc=[np.sum,np.mean])3. 對(duì)比兩列差異
需求:比較訂單明細(xì)號(hào)與訂單明細(xì)號(hào)2的差異并顯示出來(lái)。
sale['訂單明細(xì)號(hào)2']=sale['訂單明細(xì)號(hào)']#在訂單明細(xì)號(hào)2里前10個(gè)都+1.sale['訂單明細(xì)號(hào)2'][1:10]=sale['訂單明細(xì)號(hào)2'][1:10]+1#差異輸出result=sale.loc[sale['訂單明細(xì)號(hào)'].isin(sale['訂單明細(xì)號(hào)2'])==False]4. 去除重復(fù)值
需求:去除業(yè)務(wù)員編碼的重復(fù)值
sale.drop_duplicates('業(yè)務(wù)員編碼',inplace=True)5. 缺失值處理
#用0填充缺失值sale['客戶(hù)名稱(chēng)']=sale['客戶(hù)名稱(chēng)'].fillna(0)#刪除有客戶(hù)編碼缺失值的行sale.dropna(subset=['客戶(hù)編碼'])6. 多條件篩選
需求:想知道業(yè)務(wù)員張愛(ài),在北京區(qū)域賣(mài)的商品訂單金額大于6000的信息。
sale.loc[(sale['地區(qū)名稱(chēng)']=='北京')&(sale['業(yè)務(wù)員名稱(chēng)']=='張愛(ài)')&(sale['訂單金額']>5000)]7. 模糊篩選數(shù)據(jù)
需求:篩選存貨名稱(chēng)含有'三星'或則含有'索尼'的信息。
sale.loc[sale['存貨名稱(chēng)'].str.contains('三星|索尼')]8. 分類(lèi)匯總
需求: 北京區(qū)域各業(yè)務(wù)員的利潤(rùn)總額。
sale.groupby(['地區(qū)名稱(chēng)','業(yè)務(wù)員名稱(chēng)'])['利潤(rùn)'].sum()9. 條件計(jì)算
需求:存貨名稱(chēng)含“三星字眼”并且稅費(fèi)高于1000的訂單有幾個(gè)?這些訂單的利潤(rùn)總和和平均利潤(rùn)是多少?(或者最小值,最大值,四分位數(shù),標(biāo)注差)
sale.loc[sale['存貨名稱(chēng)'].str.contains('三星')&(sale['稅費(fèi)']>=1000)][['訂單明細(xì)號(hào)','利潤(rùn)']].describe()10. 刪除數(shù)據(jù)間的空格
需求:刪除存貨名稱(chēng)兩邊的空格。
sale['存貨名稱(chēng)'].map(lambda s :s.strip(''))四、畫(huà)圖分析
英雄聯(lián)盟防御力:
防御能力最低的英雄(1級(jí)): 暗夜獵手,魔法貓咪,萬(wàn)花通靈
防御能力最高的英雄(10級(jí)): 正義巨像,披甲龍龜
安妮、卡爾瑪能力矩陣:
代碼示例:
# encoding: utf-8import jsonfrom pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.charts import Radardef draw_Radar(): from pyecharts.charts import Radar radar = Radar() # //由于雷達(dá)圖傳入的數(shù)據(jù)得為多維數(shù)據(jù),所以這里需要做一下處理 radar_data = [[10, 10, 10, 10, 10]] radar_data1 = [[2, 10, 3, 6, 3]] radar_data2 = [[1, 8, 7, 5, 8]] # //設(shè)置column的最大值,為了雷達(dá)圖更為直觀,這里的月份最大值設(shè)置有所不同 schema = [('物理', 100), ('魔法', 10), ('防御', 10),('難度', 10),('喜好', 10) ] # //傳入坐標(biāo) radar.add_schema(schema) radar.add('滿(mǎn)分', radar_data) # //一般默認(rèn)為同一種顏色,這里為了便于區(qū)分,需要設(shè)置item的顏色 radar.add('安妮', radar_data1, color='#E37911') radar.add('卡爾瑪', radar_data2, color='#1C86EE') radar.render()if __name__ == ’__main__’: draw_Radar()五、解析word(docx、doc)
依賴(lài)包:
# encoding: utf-8import os, sysimport docx
def word_reader(file): try:# docx 直接讀if ’docx’ in file: res = ’’ f = docx.Document(file) for para in f.paragraphs:res = res + ’n’ +para.textelse: # 先轉(zhuǎn)格式doc>docx os.system('textutil -convert docx ’%s’'%file) word_reader(file+’x’) res = ’’ f = docx.Document(file+’x’) for para in f.paragraphs:res = res + ’n’ +para.textreturn res except:# print(file, ’read failed’)return ’’六、計(jì)算器
math模塊為浮點(diǎn)運(yùn)算提供了對(duì)底層函數(shù)庫(kù)的訪(fǎng)問(wèn):
>>> import math>>> math.cos(math.pi / 4)0.70710678118654757>>> math.log(1024, 2)10.0總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注好吧啦網(wǎng)的更多內(nèi)容!
