使用python处理一万份word表格简历操作
作者:geoker 发布时间:2021-09-15 17:36:36
前言
有一天朋友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文件里的信息。
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即可。
补充:python word表格一些操作
数据格式(datas): 列表套列表
aa =[ [1,2,3,4,5],[6,7,8,9],[]…]
import os
import requests
import json
import datetime
from docx import Document
from docx.shared import Inches, Pt, Cm
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
def create_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='Table Grid')
table.style.name = 'Table Grid'
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'
for i in range(len(datas)):
cels = table.add_row().cells
for j in range(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')
生成示例
可能出现的错误,[Errno 13] Permission denied: ‘./files/项目进展总结.docx'
是因为你打开文件未关闭,操作不了,关闭他就好了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/geoker/article/details/80149463


猜你喜欢
- 1. sys_getloadavg()sys_getloadavt()可以获得系 统负载情况。该函数返回一个包含三个元素的数组,每个元素分别
- DOM遍历基于ID、元素类型、类名查找元素非常有用,但是如果你想基于它在DOM树中的位置来查找元素该怎么办?换句话说,你有一个给定的元素,你
- 参考 https://books.agiliq.com/projects/django-admin-cookbook/en/lat
- 一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1、导出数据和表结构:mysqldump -u用户名 -
- 1、os.path 方法# -*- coding: utf-8 -*-# !/usr/bin/pythonimport osimport s
- 一、显示信息的命令代码如下:<!DOCTYPE html><html><head><title&g
- 本页面破解不止一种,选择适合你的使用----------------------------------------------------
- 目录一、pyecharts绘制饼图语法简介二、绘制普通饼图三、绘制圆环图四、绘制饼图-玫瑰图一、pyecharts绘制饼图语法简介饼图主要用
- 本文实例讲述了python使用xlrd模块读写Excel文件的方法。分享给大家供大家参考。具体如下:一、安装xlrd模块 到python官网
- 前言之前实践了下face++在线人脸识别版本,这回做一下离线版本。github 上面有关于face_recognition的相关资料,本人只
- 前言Python环境的搭建这里就不赘述了,有需要的小伙伴可以在网上搜罗出很多教程,注意安装PyChom编辑工具。这次我们主要讲一下几点内容:
- 在大多数场景中,我们都用 lxml 库解析网页源码,但你是否知道,lxml 库也是可以操作 svg 图片的。我们可以使用
- 今天给大家讲的是ASP给图片加水印的知识ASP给图片加水印是需要组件的…常用的有aspjpeg和中国人自己开发的wsImage…前者有30天
- 网页编程中,在与数据库打交道的时候我们经常会碰到乱码的经常。本文就将介绍一种ASP读取MySQL数据库出现乱码的解决办法。情景再现:使用My
- 本文实例讲述了python中列表元素连接方法join用法。分享给大家供大家参考。具体分析如下:创建列表:>>> music
- 1.图片分类网络这是一个二分类网络,可以是alxnet ,vgg,resnet任何一个,负责对图片进行二分类,区分图片是真实图片还是生成的图
- 目录简介开发工具实现代码爬取效果Github地址:简介使用Python Tkinter开发一个爬取B站直播弹幕的工具,启动后在弹窗中输入房间
- 与上篇实践教程一样,在这篇文章中,我将继续从一种常见的功能——表格入手,展示Vue.js中的一些优雅特性。同时也将对filter功能与com
- 本文实例讲述了python使用cPickle模块序列化的方法,分享给大家供大家参考。具体方法如下:import cPickledata1 =
- 完成这个小球的完全弹性碰撞游戏灵感来自于:下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏:游戏初始化状态:最下面的游标和修改小球的