使用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代码使其加快作用域内的查找
Mar 30 Python
python实现多线程的两种方式
May 22 Python
python3+PyQt5实现拖放功能
Apr 24 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
python列表的逆序遍历实现
Apr 20 Python
keras实现多种分类网络的方式
Jun 11 Python
python如何使用代码运行助手
Jul 03 Python
python 下载文件的多种方法汇总
Nov 17 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
东方红 - 来复式再生机的修复
2021/03/02 无线电
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
Python实现多线程抓取妹子图
2015/08/08 Python
python变量不能以数字打头详解
2016/07/06 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
C,C++的几个面试题小集
2013/07/13 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
中介业务员岗位职责
2014/04/09 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014年行政工作总结
2014/11/19 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
运动会800米赞词
2015/07/22 职场文书
2016七夕情人节感言
2015/12/09 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB