让python帮你自动统计Word文档信息!那样工作就太方便了!

有问题,不要怕!访问

http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx (复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱[email protected],我们会及时为您解答哟~

爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:683380553

爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱[email protected],届时会有俱乐部高级会员为您排忧解难!

在日常学习与工作中,我们经常需要从一系列格式相同的Word文档中提取出关键信息,并统计到Excel文件中。例如,对于大量的项目申请表,我们需将其中的申请人姓名、年龄、联系方式等信息提取出来,整合到一个表格中。手动整理效率极低,那么是否可以使用程序实现信息的自动统计呢?

为进行演示,我们在国家统计局网站(http://www.stats.gov.cn/tjsj/tjgb/ndtjgb/)获取了如下的2008-2017年我国金融机构本外币存贷款余额及增长速度数据,将其放于目录“F:/用python处理文本文件/存贷款数据”下,如图:

让python帮你自动统计Word文档信息!那样工作就太方便了!

任意打开一个文件,其界面如下:

让python帮你自动统计Word文档信息!那样工作就太方便了!

我们需将标题中的年份及表格里的城乡居民储蓄存款、企业贷款、短期贷款、中长期贷款四项信息提取出来,并填入Excel中。在前期推文《用Python批量转换.doc文件》,我们提到,Python的pywin32库可调用office API,几乎能实现Word、Excel等软件的所有操作。因此在本推文中,我们也采用win32com模块,将Word文本中的信息写入Excel中。此外,我们还调用了如下几个重要模块(库):

python-docx库:可用于读入word文档,并将文档中的段落、文本、字体等当作对象,对对象进行处理就是对word文档内容进行处理。该库主要包括Document对象,表示一个word文档;Paragraph对象,表示word文档中的一个段落;Paragraph对象的text属性,表示段落中的文本内容。在使用python-docx库前需先进行安装,即在cmd命令行中输入“pip install python-docx”。

re模块:正则表达式(re模块)为Python自带模块,它先将正则表达式编译成一系列的字节码,由C编写的引擎执行,可直接用于搜索、替换和解析字符串。一个正则表达式由字母、数字和特殊字符(括号、星号、问号等)组成,可有效实现对复杂字符串的分析并提取出相关信息。

在此基础上,我们首先介绍单个Word文档信息的提取方法。以文件“2008年全部金融机构本外币存贷款余额及其增长速度.docx”为例,第一步导入所需模块,即输入程序:

import os
import re
import docx
from docx import Document
from win32com.client import Dispatch

其次,读入该docx文件,将其关键信息提取出来,并打印在界面上,即输入程序:

file = r'f:用python处理文本文件存贷款数据8年全部金融机构本外币存贷款余额及其增长速度.docx'
f = docx.Document(file)
p = f.paragraphs[0].text
year = re.search(r'd{4}',p).group(0)
t = f.tables[0]
UR_deposit = t.cell(2,1).text
Co_deposit = t.cell(4,1).text
ST_loan = t.cell(6,1).text
LT_loan = t.cell(7,1).text
print(year,UR_deposit,Co_deposit,ST_loan,LT_loan)

此时,界面上便显示出该年的各项存贷款数据信息,如下:

让python帮你自动统计Word文档信息!那样工作就太方便了!

进一步地,我们调用win32com模块打开Excel程序,新建工表“Sheet1”,将以上5项信息写入Excel表格中后保存。完整程序如下:

import os
import re
import docx
from docx import Document
from win32com.client import Dispatch
###提取出docx文本中的信息
file = r'f:用python处理文本文件存贷款数据8年全部金融机构本外币存贷款余额及其增长速度.docx'
f = docx.Document(file)
p = f.paragraphs[0].text
year = re.search(r'd{4}',p).group(0)
t = f.tables[0]
UR_deposit = t.cell(2,1).text
Co_deposit = t.cell(4,1).text
ST_loan = t.cell(6,1).text
LT_loan = t.cell(7,1).text
print(year,UR_deposit,Co_deposit,ST_loan,LT_loan)
###将docx文件中的信息写入Excel表格
excel = Dispatch('Excel.Application') #打开Excel程序
excel.Visible = True #显示自动化操作界面
sheet1 = excel.Workbooks.Add() #新建工作表
list1 = ['year','UR_deposit','Co_deposit','ST_loan','LT_loan']
for j in range(1,6):
 excel.Cells(1,j).Value = list1[j-1] #填入对应标题
list2 = [year,UR_deposit,Co_deposit,ST_loan,LT_loan]
for num in range(1,6):
 excel.Cells(2,num).Value = list2[num-1] #填入各单元格信息
sheet1.SaveAs(r'f:用python处理文本文件存贷款数据8年全部金融机构本外币存贷款余额及其增长速度.xlsx')
excel.Quit()

在上述程序中,为简化步骤,我们将代表标题的字符串及定义各项信息的宏名称分别放入列表list1和list2中,并在循环中进行调用。文档处理结果如下:

让python帮你自动统计Word文档信息!那样工作就太方便了!

爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:

https://ke.qq.com/course/286526?tuin=1b60b462

敬请关注!

现在,我们尝试将该目录下所有Word文档中的信息统计到同一个Excel表格中。首先定义一个函数word_text(path,num),参数path表示需处理的文件,num表示该文件信息在Excel表格中的行数。我们遍历该路径下的所有docx文件,将文件信息依次写入Excel的对应行。完整程序和最终成果如下:

import os
import re
import docx
from docx import Document
from win32com.client import Dispatch
###定义函数式
def word_text(path,num):
 f = docx.Document(path)
 p = f.paragraphs[0].text
 year = re.search(r'd{4}',p).group(0)
 t = f.tables[0]
 UR_deposit = t.cell(2,1).text
 Co_deposit = t.cell(4,1).text
 ST_loan = t.cell(6,1).text
 LT_loan = t.cell(7,1).text
 print(year,UR_deposit,Co_deposit,ST_loan,LT_loan) 
 excel.Cells(num,1).Value = year
 excel.Cells(num,2).Value = UR_deposit 
 excel.Cells(num,3).Value = Co_deposit
 excel.Cells(num,4).Value = ST_loan
 excel.Cells(num,5).Value = LT_loan
###打开Excel程序,将文件信息依次写入
excel = Dispatch('Excel.Application') 
excel.Visible = True 
sheet1 = excel.Workbooks.Add() 
list = ['year','UR_deposit','Co_deposit','ST_loan','LT_loan']
for i in range(1,6):
 excel.Cells(1,i).Value = list[i-1] #填入对应标题
 excel.Cells(1,i).Interior.ColorIndex = 6 #将标题设置为黄色背景
dir_path = r'f:用python处理文本文件存贷款数据'
j = 2 #定义初始写入行数为2
for file in os.listdir(dir_path):
 if os.path.splitext(file)[1] == ".docx": #判断是否为docx文件
 word_text(file,j)
 j = j+1
sheet1.SaveAs(dir_path+"\"+'2008-2017年全部金融机构本外币存贷款及其增长速度.xlsx')
excel.Quit()

让python帮你自动统计Word文档信息!那样工作就太方便了!

利用上述程序,我们便迅速统计了该目录下的所有Word文档中的数据信息。对于其他类型的文本,我们也可套用这一思路,并灵活运用Python的正则表达式(re模块)进行字符串的匹配与提取,真正提升文本数据处理的速度与效率。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/86686541
今日推荐