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

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

作者: 919b0c54458f | 来源:发表于2019-01-29 10:39 被阅读17次

    有问题,不要怕!访问

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

    爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

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

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

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

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

    我们需将标题中的年份及表格里的城乡居民储蓄存款、企业贷款、短期贷款、中长期贷款四项信息提取出来,并填入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)

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

    进一步地,我们调用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中,并在循环中进行调用。文档处理结果如下:

    爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握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()

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ljotsqtx.html