资讯专栏INFORMATION COLUMN

利用Python好好的整理你的附件

cyrils / 3303人阅读

摘要:主要用来调用命令行,因为模块无法解析的文件,所以在解析前将的文件转换成文件。主要用于遍历文件夹获取文件。总结利用还是减少了一定的重复劳动,但面对一些不标准的东东貌似还没有很好的方式。

目前我的文件夹中有500多份简历,如果我想知道一些信息,比如学校,学历之类的,我需要打开每一份word去查看,太耗时间了。这个时候python需要出马了。
目标

目前类似截图中的word有600+,想简单的进行整理:

可以整理出一份excel用于导航(类似目录),可以通过excel来快速定位到所要的附件,如下图效果:

具体实现

有了目标,就具体说说如何实现的,整理思路还是比较简单的,就是遍历所有的word文件,将word中关键的信息获取到并保存到excel中。

这里列下主要用到的模块:

import xlsxwriter
import subprocess
import os
import docx
import sys
import re

xlsxwriter主要用来操作excel,xlsxwriter只能用来写,效率上比xlwt要高,数据量不多,用xlwt也ok。

subprocess主要用来调用命令行,因为docx模块无法解析doc的word文件,所以在解析前将doc的文件转换成docx文件。

os主要用于遍历文件夹获取文件。

docx主要用来解析word文档。

规范下文件名

首先我们先规范下文件名称,因为在使用subprocess.call调用命令时,空格,特殊符号之类的没办法转义导致报错,所以干脆在之前就清理掉这个潜在问题。

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))
遍历文件

之后我们就可以开始正题,遍历每个文件进行解析:

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) #移除转换的文件
解析word文件

接下来就是解析文件了,通过docx模块很容易实现,具体的解析逻辑就不贴了,就是遍历每一行,根据一些关键字,符号来截取数据(每个简历格式基本上差不多的)

doc = docx.Document(fullname)
for para in doc.paragraphs:
    print(para.text)
    ...具体解析逻辑...
填充excel

解析完的数据就可以直接填充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还是减少了一定的重复劳动,但面对一些不标准的东东貌似还没有很好的方式。

虽然可以增加逻辑来兼容这些不标准,但显然这个付出和产出就有点不成正比了。

利用好手上的工具去提高效率才是真的,至于是傻瓜式的重复工作,还是通过代码来减少重复劳动,就看你自己怎么看啦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41707.html

相关文章

  • 利用Python自动发送邮件

    摘要:自动发送邮件我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助来自动发送邮件。一份邮件的组成下图是中发送一份邮件的界面,主要包含发件人收件人抄送人主题正文附件这几部分。 ...

    leo108 评论0 收藏0
  • python发送邮件

    摘要:参数分别表示主机和端口。注意也可以在参数中指定端口号如,这样就没必要给出参数。当需要发送附件的时候使用的就是这个类的一个子类。主要用来发送图片普通文本邮件文本对象,其中是邮件内容,邮件类型,可以是普通文本邮件,邮件编码,可以是等等。 python发送邮件 准备 python中发送邮件主要用的是smtplib和email两个模块,下面主要对这两个模块进行讲解 在讲解之前需要准备至少两个...

    mengera88 评论0 收藏0
  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 「码个蛋」2017年200篇精选干货集合

    摘要:让你收获满满码个蛋从年月日推送第篇文章一年过去了已累积推文近篇文章,本文为年度精选,共计篇,按照类别整理便于读者主题阅读。本篇文章是今年的最后一篇技术文章,为了让大家在家也能好好学习,特此花了几个小时整理了这些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 让你收获满满! 码个蛋从2017年02月20...

    wangtdgoodluck 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<