如何用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实现斐波那契(Fibonacci)函数
Mar 25 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 Python
Python 的类、继承和多态详解
Jul 16 Python
Django内容增加富文本功能的实例
Oct 17 Python
Python编程中类与类的关系详解
Aug 08 Python
python爬虫 正则表达式解析
Sep 28 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
如何写python的配置文件
Jun 07 Python
Django显示可视化图表的实践
May 10 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程序的多种方法介绍
2014/11/06 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
phpwind放自动注册方法
2006/12/02 Javascript
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
网页javascript精华代码集
2007/01/24 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
python异常处理try except过程解析
2020/02/03 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
几款好用的python工具库(小结)
2020/10/20 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
Python之多进程与多线程的使用
2021/02/23 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
支教自我鉴定
2014/01/18 职场文书
基层干部十八大感言
2014/01/19 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
优秀团员事迹材料
2014/12/25 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Go语言读取txt文档的操作方法
2022/01/22 Golang
Mysql中常用的join连接方式
2022/05/11 MySQL
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers