有一天朋友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. (检查数据是否有错误或缺失)
利用python的zipfile库以及re库来处理docx压缩包里面的document.xml文件里的信息。
import zipfile
import re
def get_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:]#依据简历标题切分每一份简历信息
#return table_list
return text
打印text的结果
自此,输出了简历中的所有相关信息
接下来根据这些相关信息抓取各个字段的值
import re
def get_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)
'''
此处省略其他字段匹配
'''
return value_list
这样就将每个字段匹配到的内容以一个列表的形式返回了
接下来将这个列表里的内容写入到txt中
str1 = ""
for value in value_list:
str1 = str1 + str(value[0]) + "\t"#每个字段值用制表符\t分隔
str1 = str1 + "\n"
with open("result.txt", "a+") as f:#将内容以追加形式写入到result.txt中
f.write(str1)
以上是将一个word转成了txt
只要再对文件夹中的文件进行批量处理就ok了
以下附上完整代码
import re
import zipfile
import os
def get_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:]#依据简历标题切分每一份简历信息
return table_list
def get_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)
'''
此处省略其他字段匹配
'''
return value_list
cv_list = []
for i in os.listdir(os.getcwd()):
a = os.path.splitext(os.getcwd() + "\\" + i)#获取当前目录下所有文件的文件名
if a[1] == '.docx':#如果文件后缀
print(os.getcwd()+"\\"+i)
cv_list = cv_list + get_document(os.getcwd() + "\\" + i)#每份简历信息为一个列表元素
for i in cv_list:
value_list = get_field_value(i)
str1 = ""
for value in value_list:
str1 = str1 + str(value[0]) + "\t"
str1 = str1 + "\n"
with open("result.txt", "a+") as f:
f.write(str1)
一万份word表格简历信息转成了txt,然后用excel打开txt即可。
后来,朋友A对我说,老板夸奖他会python,把这件事情做的又快又好。很快他被调到了其他部门,不再处理这些琐碎的事情,从此升职加薪,走上了”出任CEO,迎娶白富美“的康庄大道。