使用python处理一万份word表格简历操作
前言
有一天朋友A向我抱怨,他的老板要求他把几百份word填好的word表格简历信息整理到excel中,看着他一个个将姓名,年龄……从word表格里复制粘贴到excel里,边粘贴心里边暗暗诅咒着自己的boss……但毕竟新手小白,又不能违背老板的意愿说我不干了,爱咋咋地,于是过来向我求助。我说,这事情好办啊,学学python就能解决啊,简单容易上手。好了,接下来进入正题。
思路:首先针对每一份word表格进行分析
怎么才能利用python获取到word表格里面的信息,最初的想法是把word里面的表格转成网页格式,毕竟混迹爬虫浅水区多年,用正则表达式处理网页来获取信息是比较轻松的,于是想到把word转成网页格式,这么一想,整个人都疯了,几百份文件打开然后转成网页,那也有不少劳动量啊。于是在网上搜了许久,发现docx文件自己本身是压缩文件,打开压缩包之后竟然发现里面有个专门存储word里面文本的文件。
打开文件找,发现我们想要的信息全都藏在这个名为document.xml的文件里
于是基本过程就可以确定了
1.打开docx的压缩包
2.获取word里面的正文信息
3.利用正则表达式匹配出我们想要的信息
4.将信息存储到txt中(txt可以用excel打开)
5.批量调用上述过程,完成一万份简历的提取工作
6.(检查数据是否有错误或缺失)
0x01获取docx信息
利用python的zipfile库以及re库来处理docx压缩包里面的document.xml文件里的信息。
importzipfile
importre
defget_document(filepath):
z=zipfile.ZipFile(filepath,"r")
text=z.read("word/document.xml").decode("UTF-8")
text=re.sub(r"<.*?>","",text)#去除xml里的所有标记符
###如果多份简历在同一个word文件里###
#table_list=text.split("XX简历")[1:]#依据简历标题切分每一份简历信息
#returntable_list
returntext
打印text的结果
自此,输出了简历中的所有相关信息
0x02抓取各字段值
接下来根据这些相关信息抓取各个字段的值
importre defget_field_value(text): value_list=[] m=re.findall(r"姓名(.*?)性别",table) value_list.append(m) m=re.findall(r"性别(.*?)学历",table) value_list.append(m) m=re.findall(r"民族(.*?)健康状况",table) value_list.append(m) ''' 此处省略其他字段匹配 ''' returnvalue_list
这样就将每个字段匹配到的内容以一个列表的形式返回了
0x03将内容写入到文件
接下来将这个列表里的内容写入到txt中
str1=""
forvalueinvalue_list:
str1=str1+str(value[0])+"\t"#每个字段值用制表符\t分隔
str1=str1+"\n"
withopen("result.txt","a+")asf:#将内容以追加形式写入到result.txt中
f.write(str1)
以上是将一个word转成了txt
只要再对文件夹中的文件进行批量处理就ok了
0x04批量处理完整代码
以下附上完整代码
importre
importzipfile
importos
defget_document(filepath):
z=zipfile.ZipFile(filepath,"r")
text=z.read("word/document.xml").decode("UTF-8")
text=re.sub(r"<.*?>","",text)#去除xml里的所有标记符
###如果多份简历在同一个word文件里###
table_list=text.split("XX简历")[1:]#依据简历标题切分每一份简历信息
returntable_list
defget_field_value(text):
value_list=[]
m=re.findall(r"姓名(.*?)性别",table)
value_list.append(m)
m=re.findall(r"性别(.*?)学历",table)
value_list.append(m)
m=re.findall(r"民族(.*?)健康状况",table)
value_list.append(m)
'''
此处省略其他字段匹配
'''
returnvalue_list
cv_list=[]
foriinos.listdir(os.getcwd()):
a=os.path.splitext(os.getcwd()+"\\"+i)#获取当前目录下所有文件的文件名
ifa[1]=='.docx':#如果文件后缀
print(os.getcwd()+"\\"+i)
cv_list=cv_list+get_document(os.getcwd()+"\\"+i)#每份简历信息为一个列表元素
foriincv_list:
value_list=get_field_value(i)
str1=""
forvalueinvalue_list:
str1=str1+str(value[0])+"\t"
str1=str1+"\n"
withopen("result.txt","a+")asf:
f.write(str1)
一万份word表格简历信息转成了txt,然后用excel打开txt即可。
补充:pythonword表格一些操作
数据格式(datas):列表套列表
aa=[[1,2,3,4,5],[6,7,8,9],[]…]
importos
importrequests
importjson
importdatetime
fromdocximportDocument
fromdocx.sharedimportInches,Pt,Cm
fromdocx.oxml.nsimportqn
fromdocx.enum.textimportWD_PARAGRAPH_ALIGNMENT
defcreate_insert_word_table(datas,stday,etday,s):
"""创建word表格以及插入数据"""
doc=Document()
doc.styles['Normal'].font.name='Calibri'#是用来设置当文字是西文时的字体,
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'宋体')#是用来设置当文字是中文时的字体
#doc.styles['Normal'].font.size=Pt(14)#设置所有文字字体大小为14
distance=Inches(0.5)
sec=doc.sections[0]#sections对应文档中的“节”
sec.left_margin=distance#以下依次设置左、右、上、下页面边距
sec.right_margin=distance
sec.top_margin=distance
sec.bottom_margin=distance
sec.page_width=Inches(11.7)#设置页面宽度
#sec.page_height=Inches(9)#设置页面高度
#doc.add_heading()#设置标题,但是不符合我的条件,只能试用下方p.add_run('我是文字')
p=doc.add_paragraph()#添加段落
p.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER#设置中央对齐
run=p.add_run('我是文字')
run.font.size=Pt(22)
doc.add_paragraph()#添加空段落
#添加表格
table=doc.add_table(rows=1,cols=10,style='TableGrid')
table.style.name='TableGrid'
table.style.font.size=Pt(14)
table.rows[0].height=Cm(20)
title=table.rows[0].cells
title[0].text='姓名'
title[1].text='1'
title[2].text='2'
title[3].text='3'
title[4].text='4'
title[5].text='5'
title[6].text='6'
title[7].text='7'
title[8].text='8'
title[9].text='9'
foriinrange(len(datas)):
cels=table.add_row().cells
forjinrange(len(datas[i])):
#cels[j].text=str(datas[i][j])
p=cels[j].paragraphs[0]
p.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER#设置中央对齐
p.add_run(str(datas[i][j]))
ph_format=p.paragraph_format
#ph_format.space_before=Pt(10)#设置段前间距
#ph_format.space_after=Pt(12)#设置段后间距
ph_format.line_spacing=Pt(40)#设置行间距
doc.save('./files/项目总结.docx')
生成示例
可能出现的错误,[Errno13]Permissiondenied:‘./files/项目进展总结.docx'
是因为你打开文件未关闭,操作不了,关闭他就好了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。