【Python】实战多word的内容合并筛选及输出

导语

领导给了一个任务:已知每天公司会发一个“每日要情”doc文件,求一年每日要情中所有数字化转型相关内容的汇编。

开发工具

python版本:3.8.8

相关模块:

os

docx

win32com

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。


代码全解

解这种办公自动化的题,最简单易懂的思路就是用python全程模拟人的全套动作。那么人肉暴力解这道题是怎么解?首先要人肉将所有word文档粘贴在一起,再Ctrl+F查找数字化转型相关的关键词,把搜到的内容整理到另外一个word里。目测两天两夜弄不完,即使弄得完,也会被机械劳动恶心死。

那么整个项目就被分解为三大动作:合并word,检索word,输出word。

1. 合并word

虽然处理word和excel有很多库,比如处理excel的xlrd、xlwt、xlutils、xlwings、openpyxl、xlsxwriter,处理word的python-docx、docx2txt、textract、antiword。

但是他们都不如win32com这个神器好用。它能支持office所有的com接口。这个接口的使用说明在微软的官网也可以查询到。有了这么完备的接口,我们就能在office的功能中“为所欲为”。其他的库,更加轻量,但是如果要用到更复杂的功能的时候,可能就比较捉襟见肘。

更要命的是没有支持doc文件的库,大部分只支持docx文件。

那么如何用win32com合并doc文件并生成docx文件,就成了本项目最关键的一步。

import os
import win32com.client as win32


word = win32.gencache.EnsureDispatch('Word.Application')


#启动word对象应用
word.Visible = False


#获取文件夹中的所有doc文件的文件名
path = r'D:\pythonProject\meiriyaoqing\2021年每日要情'
files = []
for filename in os.listdir(path):
    filename = os.path.join(path,filename)
    files.append(filename)


#新建合并后的文档
output = word.Documents.Add()


#拼接文档
for file in files:
    output.Application.Selection.InsertFile(file)


#获取合并后文档的内容
doc = output.Range(output.Content.Start, output.Content.End)


#保存docx文档
output.SaveAs('D://pythonProject//meiriyaoqing//result.docx')
output.Close()

差不多等个10多分钟,800多页,88万字的报告就合并完成了。

b43a101b126d5061bdeeb0c89996ed31.png

所有doc内容被合并到了result.docx里。

01d1e7c5c7914edf4814e5349f76b141.png

2. 检索word

首先读取result.docx的内容看看一共有多少个段落。

import docx
from docx import Document


doc = Document("result.docx")
print("段落数:"+str(len(doc.paragraphs)))
print(len(doc.paragraphs))

65899ff120930dc24593f3b18ee5a2dd.png

把所有段落存放在一个名为text的列表中。

#段落内容存入列表
text=[]
for i in range(len(doc.paragraphs)):
    text.append(doc.paragraphs[i].text)
    print("第"+str(i)+"段的内容是:"+doc.paragraphs[i].text)
print(text)

按内容来划分这些段落,将有数字化转型及其相关词的段落全部取出,放在第一部分。

#按内容分类


result=docx.Document()


paragraph1 = result.add_paragraph("\n数字化转型相关内容:\n")


for i in text:
    flag=0
    if '数字化转型' in i:
        print(i)
        result.add_paragraph(i, style='List Number')
        flag=1
    if '5G' in i:
        if flag ==0:
            result.add_paragraph(i, style='List Number')
            flag=1
    if 'RPA' in i:
        if flag ==0:
            result.add_paragraph(i, style='List Number')
            flag=1
    if '人工智能' in i:
        if flag ==0:
            result.add_paragraph(i, style='List Number')
            flag=1

按专业来划分这些段落,将有信通专业及其相关词的段落全部取出,排除掉其中包含有信通公司但是属于现场作业类的段落,放在第二部分。

#按专业分类:


paragraph2 = result.add_paragraph("\n信通公司相关内容:\n")


for i in text:


    if '现场作业' in i:
        continue


    if '信通公司' in i:
        print(i)
        result.add_paragraph(i, style='List Number')
    if '信通分公司' in i:
        print(i)
        result.add_paragraph(i, style='List Number')
    if '信息通信分公司' in i:
        print(i)
        result.add_paragraph(i, style='List Number')

3. 输出word

result.save("每日要情智能分类结果.docx")

025c2ca1ff64ae9830aa81174a559519.png

848c5391a8b1ae611a2582765508ae02.png

 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群955171419,加入微信群请扫码:

e6da303456db9b41a44b0a88ea31609c.png

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值