使用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分割TXT文件成4K的TXT文件
May 23 Python
python3简单实现微信爬虫
Apr 09 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
python和shell获取文本内容的方法
Jun 05 Python
用python生成1000个txt文件的方法
Oct 25 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
python实现爬取百度图片的方法示例
Jul 06 Python
Python如何调用JS文件中的函数
Aug 16 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
python uuid生成唯一id或str的最简单案例
Jan 13 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/12/06 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP获取文件行数的方法
2015/06/10 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP加密解密类实例代码
2016/07/20 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
运算符&&的三个不同层次
2013/04/07 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
多媒体专业自我鉴定
2014/02/28 职场文书
办公室副主任职责范本
2014/03/08 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
法定代表人身份证明书
2015/06/18 职场文书
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python