目前我的文件夹中有500多份简历,如果我想知道一些信息,比如学校,学历之类的,我需要打开每一份字去查看,太耗时间了。这个时候python需要出马了。
<强>目标强>
目前类似截图中有600 +的词,想简单的进行整理:
可以整理出一份excel用于导航(类似目录),可以通过excel来快速定位到所要的附件,如下图效果:
<强>具体实现强>
有了目标,就具体说说如何实现的,整理思路还是比较简单的,就是遍历所有的词文件,将词中关键的信息获取到并保存到excel中。
这里列下主要用到的模块:
进口xlsxwriter 导入子流程 进口操作系统 进口多克斯 导入系统 进口re
xlsxwriter主要用来操作excel, xlsxwriter只能用来写,效率上比xlwt要高,数据量不多,用xlwt也ok。
子流程主要用来调用命令行,因多克斯为模块无法解析doc的词文件,所以在解析前将医生的文件转换成多克斯文件。
操作系统主要用于遍历文件夹获取文件。
多克斯主要用来解析字文档。
<>强规范下文件名强>
首先我们先规范下文件名称,因为在使用subprocess.call调用命令时,空格,特殊符号之类的没办法转义导致报错,所以干脆在之前就清理掉这个潜在问题。
def remove_doc_special_tag (): 在os.listdir文件名(路径): otherName=re.sub (“[\ s + \ ! \/_, $ % ^ *(+ \“\”)] + |[+——() & # 63;【】“!,。, ~ @ #¥%……, *()) +”、“”,文件名) os.rename (os.path.join(路径,文件名),os.path.join(路径,otherName))
<>强遍历文件强>
之后我们就可以开始正题,遍历每个文件进行解析:
路径='/用户/cavin/桌面/文件 在os.listdir文件名(路径): …具体逻辑…
这里碰到一个问题,首先多克斯是模块无法解析doc的词文档,由于又是使用的mac,所以也无法使用win32com模块,这个问题就比较尴尬,后来谷歌发现可以通过命令将医生转换成多克斯。
这里注意下转换后的多克斯文件样式是丢失的,但这不影响我获取文本信息。
于是就有了这段代码,如果是医生的文件,优先转换成多克斯,待解析完之后再移除掉。
如果filename.endswith (. doc): 子流程。调用(“textutil转换多克斯{0}的.format fullname, shell=True) fullname=fullname [4] +“。docx” sheetModel=etl_word_files (fullname) #解析文本逻辑 子流程。调用(rm{0}的.format fullname, shell=True) #移除转换的文件
<>强解析字文件强>
接下来就是解析文件了,通过多克斯模块很容易实现,具体的解析逻辑就不贴了,就是遍历每一行,根据一些关键字,符号来截取数据(每个简历格式基本上差不多的)
医生=docx.Document (fullname) 在doc.paragraphs:帕拉 打印(para.text) …具体解析逻辑…
<强>填充excel 强>
解析完的数据就可以直接填充excel了:
工作簿=xlsxwriter.Workbook (“report_list.xlsx”) 工作表=workbook.add_worksheet(列表) 工作表。写(0,0,'序号”) 工作表。写(0,1,“姓名”) 工作表。写(0,2,“性别”) 工作表。写(0 3年龄”) 工作表。写(0 4“籍贯”) 工作表。写(0、5、“目前所在地”) 工作表。写(0 6的学历”) 工作表。写(0 7的学校”) 工作表。写(0 8的公司”) 工作表。写(0 9的职位”) 工作表。写(0,10,”文档链接的)
这里主要说下文档链接的填充,由于是要给其他人的,只要保证附件和excel在同一个文件夹下,采用相对路径的方式来实现,可以使用excel的函数超链接:
工作表。写(指数10 '=超链接(\”。/+文件名+ \”,\“附件\”)”)
<强>问题点