目前个人文件夹中有500多份简历,若是我想知道一些信息,好比学校,学历之类的,我须要打开每一份word去查看,太耗时间了。这个时候python须要出马了。
目前相似截图中的word有600+,想简单的进行整理:python
能够整理出一份excel用于导航(相似目录),能够经过excel来快速定位到所要的附件,以下图效果:shell
有了目标,就具体说说如何实现的,整理思路仍是比较简单的,就是遍历全部的word文件,将word中关键的信息获取到并保存到excel中。函数
这里列下主要用到的模块:工具
import xlsxwriter import subprocess import os import docx import sys import re
xlsxwriter
主要用来操做excel,xlsxwriter
只能用来写,效率上比xlwt
要高,数据量很少,用xlwt
也ok。google
subprocess
主要用来调用命令行,由于docx
模块没法解析doc的word文件,因此在解析前将doc的文件转换成docx文件。spa
os
主要用于遍历文件夹获取文件。命令行
docx
主要用来解析word文档。excel
首先咱们先规范下文件名称,由于在使用subprocess.call
调用命令时,空格,特殊符号之类的没办法转义致使报错,因此干脆在以前就清理掉这个潜在问题。code
def remove_doc_special_tag(): for filename in os.listdir(path): otherName = re.sub("[\s+\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "",filename) os.rename(os.path.join(path,filename),os.path.join(path,otherName))
以后咱们就能够开始正题,遍历每一个文件进行解析:orm
path='/Users/cavin/Desktop/files' for filename in os.listdir(path): ...具体逻辑...
这里碰到一个问题,首先是docx
模块没法解析doc的word文档,因为又是使用的mac,因此也没法使用win32com
模块,这个问题就比较尴尬,后来google发现能够经过命令将doc转换成docx。
这里注意下转换后的docx文件样式是丢失的,但这不影响我获取文本信息。
因而就有了这段代码,若是是doc的文件,优先转换成docx,待解析完以后再移除掉。
if filename.endswith('.doc'): subprocess.call('textutil -convert docx {0}'.format(fullname),shell=True) fullname=fullname[:-4]+".docx" sheetModel= etl_word_files(fullname)#解析文本逻辑 subprocess.call('rm {0}'.format(fullname),shell=True) #移除转换的文件
接下来就是解析文件了,经过docx模块很容易实现,具体的解析逻辑就不贴了,就是遍历每一行,根据一些关键字,符号来截取数据(每一个简历格式基本上差很少的)
doc = docx.Document(fullname) for para in doc.paragraphs: print(para.text) ...具体解析逻辑...
解析完的数据就能够直接填充excel了:
workbook = xlsxwriter.Workbook('report_list.xlsx') worksheet = workbook.add_worksheet('list') worksheet.write(0,0, '序号') worksheet.write(0,1, '姓名') worksheet.write(0,2, '性别') worksheet.write(0,3, '年龄') worksheet.write(0,4, '籍贯') worksheet.write(0,5, '目前所在地') worksheet.write(0,6, '学历') worksheet.write(0,7, '学校') worksheet.write(0,8, '公司') worksheet.write(0,9, '职位') worksheet.write(0,10, '文档连接')
这里主要说下文档连接的填充,因为是要给其余人的,只要保证附件和excel在同一个文件夹下,采用相对路径的方式来实现,可使用Excel的函数HYPERLINK
:
worksheet.write(index,10, '=HYPERLINK(\"./'+filename+'\",\"附件\")')
到这里,基本上能够实现相应的功能了,但不是很完美,主要是word中的格式不标准,没有很好的方式去准确获取到我要的数据,但主要的姓名学校之类的大多数都抓到了,也算减轻点任务啦。
利用python仍是减小了必定的重复劳动,但面对一些不标准的东东貌似尚未很好的方式。
虽然能够增长逻辑来兼容这些不标准,但显然这个付出和产出就有点不成正比了。
利用好手上的工具去提升效率才是真的,至因而傻瓜式的重复工做,仍是经过代码来减小重复劳动,就看你本身怎么看啦。