首页 > 编程语言 >python在word文档中搜索关键词,复制段落

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

时间:2024-09-27 10:21:41浏览次数:13  
标签:search word python doc Range range 文档 Paragraphs new

目录

简介:

打开原始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()

标签:search,word,python,doc,Range,range,文档,Paragraphs,new
From: https://blog.csdn.net/flashman911/article/details/142584132

相关文章

  • python最经典基础算法题-10
    题目001:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n【思路】:学了lambda想耍一下,结果发现官网写的比我还简洁!n=17fenmu=range(2,n+1,2)ifn%2==0elserange(1,n+1,2)s=sum(map(lambdax:1/x,fenmu))print(s)#官网参考......
  • Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合
    龚珀兹曲线下表数据为某跨国公司1989-2021年的年销售量数据,使用适合的模型预测该公司2022年的销售额,并得出理由。部分数据如下表(具体数据从主页资源下载):年份时序(t)总额(yt)时序应该从0开始19891138.40019902174.00119913190.55219924196.10319935230.50419946237.10519957274.......
  • Python画笔案例-064 绘制彩花之旋转羽毛
    1、绘制彩花之旋转羽毛通过python的turtle库绘制彩花之旋转羽毛,如下图:2、实现代码 绘制彩花之旋转羽毛,以下为实现代码:"""彩花之旋转羽毛.py本程序需要coloradd模块支持,安装方法:pipinstallcoloradd技术支持微信scartch8,QQ:406273900www.lix......