时间:2021-05-23
有一天朋友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 zipfileimport redef 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 redef 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 reimport zipfileimport osdef 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_listdef 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_listcv_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表格一些操作
可能出现的错误,[Errno 13] Permission denied: ‘./files/项目进展总结.docx'
是因为你打开文件未关闭,操作不了,关闭他就好了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在使用word进行表格处理时经常会发现word的表格处理不如excel方便,例如需要将word中已有的表格拆分成两份。那么word/WPS如何将一个表格分成两个
用word制作个人简历的步骤: 1、打开word,打开事先准备好的简历模板,在WORD中打出个人简历4个字,然后在插入选项中,插入一个6乘13的表格。在表格中
word做个人简历表的步骤: 1、打开word,打开事先准备好的简历模板,在WORD中打出个人简历4个字,然后在插入选项中,插入一个6乘13的表格。在表格中输
简历是工作中经常使用的文件,想要做一份中英双语简历,该怎么创建呢?下面我们就来看看详细的教程。软件名称:Word2003绿色精简版(单独word15M)软件大小
word文档做简历表格的方法如下: 1、打开word文档,点击【插入】菜单下的【表格】选项,生成一个7乘7的表格; 2、在表格中输入对应的文字内容; 3、