如何用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中的元组与逻辑运算符
Oct 13 Python
Python解惑之整数比较详解
Apr 24 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
Python读取word文本操作详解
Jan 22 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python多进程并行代码实例
Sep 30 Python
Python如何把十进制数转换成ip地址
May 25 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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
Search Engine Friendly的URL设计
2006/10/09 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
扩展String功能方法
2006/09/22 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
Underscore源码分析
2015/12/30 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
三年级学生评语
2014/04/23 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
精神病医院见习报告
2014/11/03 职场文书
租车协议书范本2014
2014/11/17 职场文书
企业宣传稿范文
2015/07/23 职场文书
车辆管理制度范本
2015/08/05 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
Python之matplotlib绘制折线图
2022/04/13 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS