如何用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中内置的NotImplemented类型的用法
Mar 31 Python
浅析PHP与Python进行数据交互
May 15 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
pycharm 配置远程解释器的方法
Oct 28 Python
想学python 这5本书籍你必看!
Dec 11 Python
python能做什么 python的含义
Oct 12 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Python使用shutil模块实现文件拷贝
Jul 31 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 清除网页病毒的方法
2008/12/05 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
js下弹出窗口的变通
2007/04/18 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
详解Vue方法与事件
2017/03/09 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
python分析apache访问日志脚本分享
2015/02/26 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
详解flask表单提交的两种方式
2018/07/21 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
Python延时操作实现方法示例
2018/08/14 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
电大毕业生自我鉴定
2014/04/10 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server
pandas提升计算效率的一些方法汇总
2021/05/30 Python