快過年了,又到了公司年底評級的時候了。今年的評級和往常一下,每個人都要填寫公司的民主評議表,給各個同事進行評價打分,然后部門收集起來根據收集上來的評價表進行匯總統計。想想要收集幾十號人的評價表,并根據每個人的評價表又要填到Excel中進行匯總計算統計給出每個人的評價,就頭大。雖然不是個什么難事,但是是個無腦的細致活。幾十個人的評價也得要花大半天的時間來弄,而且搞多了還容易搞錯。如是就想起干脆用Python/ target=_blank class=infotextkey>Python寫個小程序自動來處理這些臟活累活,評級年年都要評,每年都可以用。
要做的事情就是讀放到某個文件夾中的word文檔中的評價表格,根據表格內容進行處理,然后匯總所有的表格數據,根據計算規則,算出每個人的評分,在根據評分計算每個人的評價。匯總后寫入Excel中。
不可否認用Python來實現這樣的事情真的是太方便了,人生苦短我用Python。
我是用的python的docx包來處理word,用pandas來處理數據并寫入excel
一、首先導入包
pip install docx
pip install pandas
pandas寫excel依賴openpyxl包所以也到導入
pip install openpyxl
二、讀評價表所在的目錄文件
通過python的os包,列出文件夾里面的文件,識別出.docx的文件
files=os.listdir(filepah)
for file in files:
if file.find('.docx')>0:
docfilepah=filepah+file
三、讀word文件,處理word中的表格數據
data=[]
#讀word的docx評議表文件,并讀取word中的表格數據
def procdoc(docfilepath):
document=Document(docfilepath)
tables=document.tables
table=tables[0]
for i in range(1,len(table.rows)):
id=int(table.cell(i,0).text)
name=table.cell(i,1).text
excellent=0
if table.cell(i,2).text!='' and table.cell(i,2).text is not None:
excellent=1
competent = 0
if table.cell(i, 3).text!='' and table.cell(i, 3).text is not None:
competent=1
basicacompetent=0
if table.cell(i, 4).text!='' and table.cell(i, 4).text is not None:
basicacompetent=1
notcompetent = 0
if table.cell(i, 5).text!='' and table.cell(i, 5).text is not None:
notcompetent=1
dontunderstand =0
if table.cell(i, 6).text!='' and table.cell(i, 6).text is not None:
dontunderstand=1
Appraisedata=[id,name,excellent,competent,basicacompetent,notcompetent,dontunderstand]
data.append(appraisedata)
四、統計計算
通過pandas直接對數據進行統計計算,避免了傳統的循環計算。
df = pd.DataFrame(data,columns=['序號','姓名','優秀','稱職','基本稱職','不稱職','不了解'])
df=df.groupby(['序號','姓名']).sum() #匯總每個人每一項的評分
df['票數'] = df.apply(lambda x: x.sum(), axis=1) #統計票數
df['計分'] = (df['優秀']*95+df['稱職']*85+df['基本稱職']*75+df['不稱職']*65+df['不了解']*0)/len(df)#根據規則計分
df['評價']=df['計分'].map(getscore) #根據規則評價評級
計分方法:民主評議得分=Σ各等級票數*等級計分分數/總票數,其中“優秀”計95分,“稱職”計85分,“基本稱職”計75分,“不稱職”計65分,“不了解”不計分。
#根據評分規則計算評級
def getscore(x):
if x>=95:
score='優秀'
elif x>=80 and x<95:
score='稱職'
elif x>=75 and x<80:
score='基本稱職'
elif x<75:
score='不稱職'
return score
五、將統計計算結果寫入匯總Excel
通過pandas直接可以將dataframe寫入到Excel文件
#將匯總計算好的數據寫入Excel
def write2excle(exclefile,dataframe):
writer = pd.ExcelWriter(exclefile)
dataframe.to_excel(writer)
writer.save()
print('輸出成功')