使用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连接MySQL数据库实例分析
May 12 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
Python中str.format()详解
Mar 12 Python
Python 对象中的数据类型
May 13 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python实现插入排序和选择排序的方法
May 12 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
python超详细实现完整学生成绩管理系统
Mar 17 Python
Python中requests库的用法详解
Jun 05 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
银行演讲稿范文
2014/01/03 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2015年数学教师工作总结
2015/05/20 职场文书