使用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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
Python进程间通信之共享内存详解
Oct 30 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 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中进行身份认证
2006/10/09 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
python+opencv实现动态物体追踪
2018/01/09 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
python多进程读图提取特征存npy
2019/05/21 Python
Django多数据库的实现过程详解
2019/08/01 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
python创建学生成绩管理系统
2019/11/22 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Pycharm修改python路径过程图解
2020/05/22 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
业务主管岗位职责范本
2013/12/25 职场文书
高校教师思想汇报
2014/01/11 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL