如何用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类的多重继承问题深入分析
Nov 09 Python
Python的Urllib库的基本使用教程
Apr 30 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
原生python实现knn分类算法
Oct 24 Python
Python partial函数原理及用法解析
Dec 11 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
Python运行异常管理解决方案
Mar 09 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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 数字左侧自动补0
2008/03/31 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
Python制作爬虫抓取美女图
2016/01/20 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Python日志模块logging基本用法分析
2018/08/23 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
小学生演讲稿
2014/01/12 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
电子商务实训报告总结
2014/11/05 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
业务员管理制度范本
2015/08/06 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript