使用python批量读取word文档并整理关键信息到excel表格的实例


Posted in Python onNovember 07, 2018

目标

最近实验室里成立了一个计算机兴趣小组

倡议大家多把自己解决问题的经验记录并分享

就像在CSDN写博客一样

虽然刚刚起步

但考虑到后面此类经验记录的资料会越来越多

所以一开始就要做好模板设计(如下所示)

使用python批量读取word文档并整理关键信息到excel表格的实例

方便后面建立电子数据库

从而使得其他人可以迅速地搜索到相关记录

据说“人生苦短,我用python”

所以决定用python从docx文档中提取文件头的信息

然后把信息更新到一个xls电子表格中,像下面这样(直接po结果好了)

使用python批量读取word文档并整理关键信息到excel表格的实例

而且点击文件路径可以直接打开对应的文件(含超链接)

使用python批量读取word文档并整理关键信息到excel表格的实例

代码实现

1. 采集docx里面文件头信息

# -*- coding:utf-8 -*-
 
# 此程序可扫描Log中的docx文件并返回基本信息
 
import docx
from docx import Document
 
test_d = '../log/sublime搭建python的集成开发环境.docx'
 
def docxInfo(addr):
 document = Document(addr)
 
 info = {'title':[],
 'keywords':[],
 'author':[],
 'date':[],
 'question':[]}
 
 lines = [0 for i in range(len(document.paragraphs))]
 k = 0
 for paragraph in document.paragraphs:
 lines[k] = paragraph.text
 k = k+1
 
 index = [0 for i in range(5)]
 k = 0
 for line in lines:
 if line.startswith('标题'):
 index[0] = k
 if line.startswith('关键词'):
 index[1] = k
 if line.startswith('作者'):
 index[2] = k
 if line.startswith('日期'):
 index[3] = k
 if line.startswith('问题描述'):
 index[4] = k
 k = k+1
 
 info['title'] = lines[index[0]+1]
 
 keywords = []
 for line in lines[index[1]+1:index[2]]:
 keywords.append(line)
 info['keywords'] = keywords
 
 info['author'] = lines[index[2]+1]
 
 info['date'] = lines[index[3]+1]
 
 info['question'] = lines[index[4]+1]
 
 return info
 
if __name__ == '__main__':
 print(docxInfo(test_d))

2. 遍历log文件夹,进行信息更新

# -*- coding:utf-8 -*-
 
# 此程序可以批量扫描log中的文件,如果碰到docx文档,
# 则调用readfile()提取文档信息,并将信息保存到digger
# 日志列表.xls之中,方便后期快速检索
 
import os,datetime
import time
import xlrd
from xlrd import xldate_as_tuple
import xlwt
from readfile import docxInfo
from xlutils.copy import copy
 
# 打开日志列表读取最近一条记录的更新日期
memo_d = '../log/digger日志列表.xls'
memo = xlrd.open_workbook(memo_d) #读取excel
sheet0 = memo.sheet_by_index(0) #读取第1张表
memo_date = sheet0.col_values(5) #读取第5列
memo_n = len(memo_date) #去掉标题
if memo_n>0:
 xlsx_date = memo_date[memo_n-1] #读取最后一条记录的日期,
 latest_date = sheet0.cell_value(memo_n-1,5)
 # 返回时间戳
 
# 新建一个xlsx
memo_new = copy(memo)
sheet1 = memo_new.get_sheet(0)
 
# 重建超链接
hyperlinks = sheet0.col_values(6) # xlrd读取的也是text,造成超链接丢失
k = 1
n_hyperlink = len(hyperlinks)
for k in range(n_hyperlink):
 link = 'HYPERLINK("%s";"%s")' %(hyperlinks[k],hyperlinks[k])
 sheet1.write(k,6,xlwt.Formula(link))
 k = k+1
 
 
# 判断文件后缀
def endWith(s,*endstring):
 array = map(s.endswith,endstring)
 if True in array:
  return True
 else:
  return False
 
# 遍历log文件夹并进行查询
log_d = '../log'
logFiles = os.listdir(log_d)
for file in logFiles:
 if endWith(file,'.docx'):
 timestamp = os.path.getmtime(log_d+'/'+file)
 if timestamp>latest_date:
 info = docxInfo(log_d+'/'+file)
 sheet1.write(memo_n,0,info['title'])
 keywords_text = ','.join(info['keywords'])
 sheet1.write(memo_n,1,keywords_text)
 sheet1.write(memo_n,2,info['author'])
 sheet1.write(memo_n,3,info['date'])
 sheet1.write(memo_n,4,info['question'])
 #获取当前时间
 time_now = time.time() #浮点值,精确到毫秒
 sheet1.write(memo_n,5, time_now)
 link = 'HYPERLINK("%s";"%s")' %(file,file)
 sheet1.write(memo_n,6,xlwt.Formula(link))
 memo_n = memo_n+1
os.remove(memo_d)
memo_new.save(memo_d)
print('memo was updated!')

其实还有一些操作电子表格更好的模块,比如panda、xlsxwriter、openpyxl等。不过上述代码已经基本能实现功能,而且科研狗毕竟没那么多时间写代码做调试,所以后面有空再update吧!

致谢

在此过程中大量借鉴了CSDN论坛中各位大神的各种经验!!!

以上这篇使用python批量读取word文档并整理关键信息到excel表格的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的多线程编程
Apr 09 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
python中update的基本使用方法详解
Jul 17 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
Python流程控制语句的深入讲解
Jun 15 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 #Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 #Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 #Python
python 返回列表中某个值的索引方法
Nov 07 #Python
pandas 根据列的值选取所有行的示例
Nov 07 #Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 #Python
pandas筛选某列出现编码错误的解决方法
Nov 07 #Python
You might like
网站用php实现paypal整合方法
2010/11/28 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php中Snoopy类用法实例
2015/06/19 PHP
php中static和const关键字用法分析
2016/12/07 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
window.opener用法和用途实例介绍
2013/08/19 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python线程、进程和协程详解
2016/07/19 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
财务会计毕业生个人求职信
2014/02/03 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
团员自我评价范文
2015/03/10 职场文书
小学总务工作总结
2015/08/13 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
详细了解java监听器和过滤器
2021/07/09 Java/Android
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android