使用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 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
Python smallseg分词用法实例分析
May 28 Python
基于python 字符编码的理解
Sep 02 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
python每天定时运行某程序代码
Aug 16 Python
python多线程扫描端口(线程池)
Sep 04 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
基于python实现复制文件并重命名
Sep 16 Python
Python中的套接字编程是什么?
Jun 21 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
使用php清除bom示例
2014/03/03 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
jquery、js操作checkbox全选反选
2014/03/12 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
深入理解node.js http模块
2018/01/24 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python的变量与赋值详细分析
2017/11/08 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
《十六年前的回忆》教学反思
2014/02/14 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Golang实现可重入锁的示例代码
2022/05/25 Golang