python从word提取表格数据,python docx读取word的表格
本文主要介绍如何使用Python读取Word表格,计算汇总并写入Excel的相关信息。通过示例代码非常详细,对你的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。
00-1010前言1。第一个导入包2。阅读评估表所在的目录文件。第三,读取word文件,在word中处理表格数据。第四,进行统计计算。第五,将统计计算结果写入汇总Excel完整代码汇总。
目录
快过年了,又到了公司年底评级的时候了。今年的评分和往常一样。每个人都要填写公司的民主测评表,给每个同事一个测评分数,然后部门收集,根据收集到的测评表进行汇总统计。想想收集几十个人的评价表,填到Excel里汇总计算统计给大家评价,这可是大事。虽然不难,但这是一项无脑细致的工作。几十个人的评价也要花大部分时间才能得到,多了容易出错。如果是,我想到的就是简单的用Python写个小程序,自动处理这些脏活。评级要年年评,年年用。
我们需要做的是读取某个文件夹中word文档中的评价表,根据表格内容进行处理,然后汇总所有表格数据,根据计算规则计算出每个人的分数,再根据分数计算出每个人的评价。将总结写入Excel。
不可否认,用Python来实现这样的事情确实很方便。人生苦短。我用Python。
我用python的docx包处理word,熊猫处理数据写入excel。
前言
安装docx
pip安装熊猫
熊猫靠openpyxl包写excel,所以也是导入的。
pip安装openpyxl
一、首先导入包
通过python的os包,列出文件夹中的文件,识别出的文件。docx。
files=os.listdir(filepah)
对于文件:中的文件
if file.find(。docx’)0:
docfilepah=filepah文件
二、读评价表所在的目录文件
数据=[]
#读取word的docx评估表单文件,读取word中的表单数据。
def procdoc(docfilepath):
document=文档(docfilepath)
表格=document.tables
表格=表格[0]
对于范围(1,len(table.rows)):中的I
id=int(table.cell(i,0))。正文)
name=table.cell(i,1)。文本
优秀=0
if table.cell(i,2)。文字!= 和table.cell(i,2)。文本不是None:
优秀=1
胜任=0
if table.cell(i,3)。文字!= 和table.cell(i,3)。文本不是None:
胜任=1
基本能力=0
if table.cell(i,4)。文字!= 和table.cell(i,4)。文本不是None:
基本能力=1
notcompetent=0
if table.cell(i,5)。文字!= 和table.cell(i,5)。文本不是None:
不合格=1
dontunderstand=0
if table.cell(i,6)。文字!= 和table.cell(i,6)。文字不是没有
ne:
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文件
#将汇总计算好的数据写入Exceldef write2excle(exclefile,dataframe):
writer = pd.ExcelWriter(exclefile)
dataframe.to_excel(writer)
writer.save()
print(输出成功)
完整代码
Python不到八十行代码,实现读Word->处理表格数据->汇总计算数据->写Excel。
完整的代码如下:
import osimport pandas as pd
from docx import Document
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)
#读取评议表的目录,并处理目录中的docx文件,根据评议表计算评分,写入汇总表。
def readfile(filepah):
files=os.listdir(filepah)
for file in files:
if file.find(.docx)>0:
docfilepah=filepah+file
procdoc(docfilepah)
df = pd.DataFrame(data,columns=[序号,姓名,优秀,称职,基本称职,不称职,不了解])
print(df)
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)
print(df)
write2excle(民主评议\\民主评议表汇总.xlsx,df)
#根据评分规则计算评级
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
def write2excle(exclefile,dataframe):
writer = pd.ExcelWriter(exclefile)
dataframe.to_excel(writer)
writer.save()
print(输出成功)
if __name__ == __main__:
readfile(民主评议\\)
全部源代码:https://github.com/xiejava1018/pythonprocword
总结
到此这篇关于利用Python实现读取Word表格计算汇总并写入Excel的文章就介绍到这了,更多相关Python读取Word计算汇总写入Excel内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。