如何用python整理附件


Posted in Python onMay 13, 2018

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

目标

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

如何用python整理附件

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

如何用python整理附件

具体实现

有了目标,就具体说说如何实现的,整理思路还是比较简单的,就是遍历所有的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还是减少了一定的重复劳动,但面对一些不标准的东东貌似还没有很好的方式。

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

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

Python 相关文章推荐
python使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
python实现简单购物商城
May 21 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
python如何重载模块实例解析
Jan 25 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
python的sorted用法详解
Jun 25 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python基于dom操作xml数据的方法示例
May 12 #Python
Python实现使用卷积提取图片轮廓功能示例
May 12 #Python
在cmd中运行.py文件: python的操作步骤
May 12 #Python
对命令行模式与python交互模式介绍
May 12 #Python
python执行系统命令后获取返回值的几种方式集合
May 12 #Python
在CMD命令行中运行python脚本的方法
May 12 #Python
在cmd命令行里进入和退出Python程序的方法
May 12 #Python
You might like
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
js自带函数备忘 数组
2006/12/29 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
特色冷饮店创业计划书
2014/01/28 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
第一书记观后感
2015/06/08 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python