如何用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设置tmpfs来加速项目的教程
Apr 17 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
Python中列表list以及list与数组array的相互转换实现方法
Sep 22 Python
python实现图像识别功能
Jan 29 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
python实现nao机器人手臂动作控制
Apr 29 Python
Python二元赋值实用技巧解析
Oct 25 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
浅谈Javascript中的对象和继承
2019/04/19 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python 遍历pd.Series的index和value
2019/11/26 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
工业自动化专业毕业生推荐信
2013/11/18 职场文书
信息技术专业个人自我评价
2013/12/11 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
先进集体申报材料
2014/12/25 职场文书
盗窃案辩护词
2015/05/21 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang