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

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

时间:2024-09-27 10:21:41浏览次数:9  
标签: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读写excel单元格的效率
    目录1、批量写入一列与逐个写入一列的效率对比2、批量读取一行3、批量读取一列4、批量读取二维表格5、批量写入二维表格使用pywin32读写excel,如果逐个单元格访问,会明显感觉到执行效率很低。因为pywin32其实是python重新封装了一下com接口,交互效率本身就低。试了一......
  • Flink(二)搭建Maven工程实现WordCount
    开发环境编写WordCountpom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&qu......
  • [Python手撕]重排链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defreorderList(self,head:Optional[ListNode])->None:""&quo......
  • Python线程:如何让程序跑得更快?
    引言线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,这些线程共享进程的数据空间,并能并发执行,从而提高程序的效率。在Python中使用线程,可以让我们在编写网络爬虫、多任务处理等应用时更加游刃有余。接下来,我......
  • 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线程终止:如何优雅地结束一场“舞蹈”
    引言线程终止在多线程编程中扮演着至关重要的角色。合理地管理线程生命周期不仅能够提升程序性能,还能避免内存泄漏等问题的发生。在实际开发过程中,我们常常会遇到需要提前终止某个线程的情况,比如用户请求取消正在进行的任务、系统资源紧张时需要释放部分线程以节省资源等。掌握正......
  • 一些点云的小知识,从官方文档中发现的例子
    1、判断点云的点是否是有效的 pcl::PointXYZp_valid; p_valid.x=0; p_valid.y=0; p_valid.z=0; std::cout<<"Isp_validvalid?"<<pcl::isFinite(p_valid)<<std::endl; //IfanycomponentisNaN,thepointisnotfinite. pcl::Poi......
  • python 实现gradient boosting regressor梯度增强回归器算法
    gradientboostingregressor梯度增强回归器算法介绍梯度增强回归器(GradientBoostingRegressor,简称GBR)是一种集成学习算法,专门用于解决回归问题。它通过组合多个弱学习器(通常是决策树)来构建一个强大的预测模型。以下是关于梯度增强回归器算法的详细解释:原理梯度增强回......
  • 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......