您当前的位置:首页 > 计算机 > 编程开发 > Python

利用python处理一万份word表格简历

时间:10-14来源:作者:点击数:

前言

有一天朋友A向我抱怨,他的老板要求他把几百份word填好的word表格简历信息整理到excel中,看着他一个个将姓名,年龄……从word表格里复制粘贴到excel里,边粘贴心里边暗暗诅咒着自己的boss……但毕竟新手小白,又不能违背老板的意愿说我不干了,爱咋咋地,于是过来向我求助。我说,这事情好办啊,学学python就能解决啊,简单容易上手。好了,接下来进入正题。

思路:首先针对每一份word表格进行分析

XX公司简历

怎么才能利用python获取到word表格里面的信息,最初的想法是把word里面的表格转成网页格式,毕竟混迹爬虫浅水区多年,用正则表达式处理网页来获取信息是比较轻松的,于是想到把word转成网页格式,这么一想,整个人都疯了,几百份文件打开然后转成网页,那也有不少劳动量啊。于是在网上搜了许久,发现docx文件自己本身是压缩文件,打开压缩包之后竟然发现里面有个专门存储word里面文本的文件。

打开文件找,发现我们想要的信息全都藏在这个名为document.xml的文件里

document.xml

于是基本过程就可以确定了

1. 打开docx的压缩包

2. 获取word里面的正文信息

3. 利用正则表达式匹配出我们想要的信息

4. 将信息存储到txt中(txt可以用excel打开)

5. 批量调用上述过程,完成一万份简历的提取工作

6. (检查数据是否有错误或缺失)

0x01 获取docx信息

利用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的结果

控制台输出

自此,输出了简历中的所有相关信息

0x02 抓取各字段值

接下来根据这些相关信息抓取各个字段的值

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

这样就将每个字段匹配到的内容以一个列表的形式返回了

0x03 将内容写入到文件

接下来将这个列表里的内容写入到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了

0x04 批量处理完整代码

以下附上完整代码

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,迎娶白富美“的康庄大道。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐