python在word文档中搜索关键词,复制段落

目录

简介:

打开原始word文档

创建一个新的文档(存放摘抄内容)

搜索关键词

复制和粘贴匹配的段落


简介:

本文示例的流程:打开一个word文档,搜索关键词所在的段落,并将对应段落复制粘贴到新的word文档中,并标记出处文件名和页码。

可以用来批量对word文档进行提取。

打开原始word文档

curr_path = os.getcwd()
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\被搜索的原文.docx'%curr_path)#打开文档

创建一个新的文档(存放摘抄内容)

new_doc = doc_app.Documents.Add() new_doc.SaveAs(r'%s\摘抄.docx'%curr_path)

搜索关键词

word文档内容截图(关键词为“妈妈”)

 
#搜索
match_parag_index=0
search_range = doc.Content
while(1):
	rtn = search_range.Find.Execute(FindText="妈妈", Forward=True)
	if (rtn == False):
		break
	else:
		rParagraphs = doc.Range(Start=0, End=search_range.Paragraphs(1).Range.End)#从文档开头到匹配段落的所有行的Range
		
		if(match_parag_index!= rParagraphs.Paragraphs.Count):#避免重复行
			match_parag_index = rParagraphs.Paragraphs.Count
			print("段落编号: ", rParagraphs.Paragraphs.Count)
			print(search_range.Paragraphs(1).Range.Text)

每次匹配到搜索结果,seatch_range会自动

执行效果:

如果一段之内有多个匹配的关键词,通过判断是否在是否与上一个匹配结果的行号,是否相同,避免重复粘贴相同的行。

复制和粘贴匹配的段落

			search_range.Paragraphs(1).Range.Copy()#复制匹配的段落
			new_doc.Paragraphs.Add()#添加新的一行
			new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
			source_info = doc.Name#填写来源的文件名
			source_info += ',第%d页'%search_range.Information(constants.wdActiveEndPageNumber) #填写来源的页码
			new_range.Text += source_info
			new_doc.Paragraphs.Add()#添加新的一行
			new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
			new_range.Paste()

最终执行的结果:

完整的代码:

import win32com.client as win32
from win32com.client import constants
import os

curr_path = os.getcwd()
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\被搜索的原文.docx'%curr_path)#打开文档

new_doc = doc_app.Documents.Add()
new_doc.SaveAs(r'%s\摘抄.docx'%curr_path)

#搜索
match_parag_index=0
search_range = doc.Content
while(1):
	rtn = search_range.Find.Execute(FindText="妈妈", Forward=True)
	if (rtn == False):
		break
	else:
		rParagraphs = doc.Range(Start=0, End=search_range.Paragraphs(1).Range.End)#从文档开头到匹配段落的所有行的Range
		if(match_parag_index!= rParagraphs.Paragraphs.Count):
			match_parag_index = rParagraphs.Paragraphs.Count
			print("段落编号: ", rParagraphs.Paragraphs.Count)
			print(search_range.Paragraphs(1).Range.Text)
			search_range.Paragraphs(1).Range.Copy()#复制匹配的段落
			new_doc.Paragraphs.Add()#添加新的一行
			new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
			source_info = doc.Name#填写来源的文件名
			source_info += ',第%d页'%search_range.Information(constants.wdActiveEndPageNumber) #填写来源的页码
			new_range.Text += source_info
			new_doc.Paragraphs.Add()#添加新的一行
			new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
			new_range.Paste()
new_doc.Save()
new_doc.Close()
doc.Close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值