使用Python构建文档替换工具,轻松解放双手!

news2024/11/25 22:52:52

引言:
在处理大量文档时,逐个替换关键词是一项耗时且繁琐的任务。但是,通过使用Python和wxPython,我们可以轻松构建一个文档替换工具,帮助我们快速完成这项任务。本文将详细介绍这段代码的功能和实现原理,以及如何使用该工具来提高工作效率。

C:\pythoncode\new\replacewordindocx.py

1. 代码功能概述
   代码的主要功能是创建一个名为ReplaceFrame的wxPython窗口应用程序,提供了查找词组输入框、替换词组输入框、选择文件按钮和替换按钮等功能。

import wx
import docx
import os

class ReplaceFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="Docx替换工具", size=(400, 350))
        panel = wx.Panel(self)

        # 查找词组输入框
        find_label = wx.StaticText(panel, label="查找词组:")
        self.find_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        # 替换词组输入框
        replace_label = wx.StaticText(panel, label="替换词组:")
        self.replace_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        # 选择文件按钮
        file_button = wx.Button(panel, label="选择文件")
        self.Bind(wx.EVT_BUTTON, self.on_file_button_click, file_button)

        # 替换按钮
        replace_button = wx.Button(panel, label="替换")
        self.Bind(wx.EVT_BUTTON, self.on_replace_button_click, replace_button)

        # 布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(find_label, 0, wx.ALL, 5)
        sizer.Add(self.find_text, 1, wx.EXPAND|wx.ALL, 5)
        sizer.Add(replace_label, 0, wx.ALL, 5)
        sizer.Add(self.replace_text, 1, wx.EXPAND|wx.ALL, 5)
        sizer.Add(file_button, 0, wx.ALL, 5)
        sizer.Add(replace_button, 0, wx.ALL, 5)
        panel.SetSizer(sizer)

    def on_file_button_click(self, event):
        # 打开文件对话框选择多个docx文件
        dialog = wx.FileDialog(self, "选择文件", wildcard="Word文档 (*.docx)|*.docx",
                               style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE)
        if dialog.ShowModal() == wx.ID_OK:
            self.selected_files = dialog.GetPaths()
        dialog.Destroy()

    def on_replace_button_click(self, event):
        try:
            find_text = self.find_text.GetValue().splitlines()
            replace_text = self.replace_text.GetValue().splitlines()

            if len(find_text) != len(replace_text):
                wx.MessageBox("查找词组和替换词组数量不匹配", "错误", wx.OK | wx.ICON_ERROR)
                return

            for file_path in self.selected_files:
                doc = docx.Document(file_path)
                replaced = False

                for paragraph in doc.paragraphs:
                    for i in range(len(find_text)):
                        if find_text[i] in paragraph.text:
                            paragraph.text = paragraph.text.replace(find_text[i], replace_text[i])
                            replaced = True

                if replaced:
                    output_file = file_path.replace(".docx", "_replaced.docx")
                    doc.save(output_file)

            wx.MessageBox("替换完成", "提示", wx.OK | wx.ICON_INFORMATION)
        except Exception as e:
            wx.MessageBox("替换过程发生错误: {}".format(str(e)), "错误", wx.OK | wx.ICON_ERROR)

if __name__ == "__main__":
    app = wx.App()
    frame = ReplaceFrame()
    frame.Show()
    app.MainLoop()


   
2. 导入所需模块
   - `import wx`:导入wxPython模块,用于创建GUI界面。
   - `import docx`:导入docx模块,用于处理Word文档。
   - `import os`:导入os模块,用于文件路径操作。
   
3. 创建ReplaceFrame类
   - 继承自wx.Frame类,作为窗口应用程序的主窗口。
   - 在`__init__`方法中,初始化窗口的标题、大小,并创建一个面板(panel)用于放置其他控件。
   
4. 创建控件
   - 使用wxPython创建以下控件:
     - 查找词组输入框:使用`wx.TextCtrl`创建一个多行文本框,用于输入要查找的词组。
     - 替换词组输入框:使用`wx.TextCtrl`创建一个多行文本框,用于输入要替换的词组。
     - 选择文件按钮:使用`wx.Button`创建一个按钮,用于选择要替换的文档文件。
     - 替换按钮:使用`wx.Button`创建一个按钮,用于触发替换操作。
     
5. 布局控件
   - 使用`wx.BoxSizer`创建一个垂直布局管理器(sizer)。
   - 使用`sizer.Add`方法将各个控件添加到布局中,并设置相应的样式和间距。
   - 使用`panel.SetSizer`将布局应用到面板上。
   
6. 事件处理函数
   - `on_file_button_click`:响应选择文件按钮的点击事件,打开文件对话框,允许用户选择多个docx文件,并将选择的文件路径存储在`self.selected_files`中。
   - `on_replace_button_click`:响应替换按钮的点击事件,根据用户输入的查找词组和替换词组,在选定的文档中进行替换操作,并保存替换后的文档。
   
7. 文件操作和替换逻辑
   - 在`on_replace_button_click`方法中,通过`docx.Document`加载选定的文档,并遍历文档中的段落。
   - 对于每个段落,遍历用户输入的查找词组,检查是否存在于段落文本中,如果存在则进行替换操作。
   - 替换完成后,将替换后的文档保存在与原始文档相同的路径下,并添加"_replaced"后缀。
   
8. 异常处理
   - 通过`try-except`语句,捕获可能发生的异常,并使用`wx.MessageBox`弹出相应的错误信息对话框。
   
9. 主程序入口
   - 在`if __name__ == "__main__":`条件下,创建一个wxPython应用程序实例(app)。
   - 创建ReplaceFrame实例(frame),并显示窗口。
   - 运行应用程序的主循环(app.MainLoop()),监听事件并响应用户交互。

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【活动感想】筑梦之旅·AI共创工坊 workshop 会议回顾

目录 🌊1. 会议详情 🌊2. 会议回顾 🌍2.1 主持人开场 🌍2.2 元甲-小当家 AI 驱动的创意儿童营养早餐料理机&今天吃什么App 🌍2.3 Steven- A l 心理疗愈认知 🌍2.4 伯棠-诸子百家(xExperts)-多智能…

2.2 Python数据类型详解

第二节:Python数据类型详解 Python作为一种动态类型语言,支持多种数据类型,每种数据类型都有其特定的特点和用途。本章将详细介绍Python中常见的数据类型及其特性,以及如何使用这些数据类型进行编程。 2.2.1 整数 (int) 整数是…

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

74HC595 驱动代码 单线串口输出转并输出

void _74HC595IOIinit() {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin RCLK_Pin ;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //复用推挽…

告别模糊时代,扫描全能王带来清晰世界

模糊碑文引发的思考 上个月中旬去洛阳拜访了著名的龙门石窟,本就对碑文和文字图画感兴趣的我们,准备好好欣赏一下龙门石窟的历史文化古迹。到了地方之后,我发现石窟的高度和宽度远远超出了想象,正因如此,拍出来的文字…

知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)

欢迎来到一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426qq.com 。发布文章的风格因专栏而异,均自成体系,不足…

Sora DiT图解【文生视频】

“在古老的迪萨罗斯大陆,曾经住着一位传奇人物,名叫索拉(Sora)。这个传奇人物体现了无限潜力的本质,包括天空的浩瀚和壮丽。 当它飞得很高,彩虹色的翅膀横跨广阔的空间,光线从它引人注目的身体…

ISS检测原理

ISS(Intrinsic Shape Signatures)是由Yu Zhong于2009年提出的一种三维形状描述子,用于描述局部或半局部区域的点云,局部区域可以理解为以一个点云中某点为球心,以一定半径构成的可以包含多个内点的球形区域,半局部则是半个球形区域。ISS可用于不同视角点云的配准、快速姿…

陕西水务发展建设集团2024招聘

报名时间: 2024-06-28 至 2025-06-28 单位名称: 陕西水务发展集团有限公司 所在地: 陕西省西安市未央区 陕西水务发展建设集团2024招聘公告 一、企业简介 陕西水务发展建设集团有限公司属陕西水务发展集团二级子公司,成立于2018年,主要从事市政、房建、水利水电等工程项…

文件系统(操作系统实验)

实验内容 (1)在内存中开辟一个虚拟磁盘空间作为文件存储器, 在其上实现一个简单单用户文件系统。 在退出这个文件系统时,应将改虚拟文件系统保存到磁盘上, 以便下次可以将其恢复到内存的虚拟空间中。 (2&…

53、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理 竞争学习是一种无监督学习方法,其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络(Competitive Neural Network,简称CNN),其核心部分是…

PingCastle 3.2.0.1 - Active Directory 安全检测和评估

PingCastle 3.2.0.1 - Active Directory 安全检测和评估 活动目录域安全分析工具 请访问原文链接:https://sysin.org/blog/pingcastle/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 在 20% 的时间内获得 80% 的…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

ros中teleop_twist_keyboard安装使用

目录 1.安装 2.使用 3.说明 1.安装 sudo apt-get install ros-noetic-teleop-twist-keyboard 其中noetic替换成你自己的ros版本 2.使用 roscore #启动roscore rosrun teleop_twist_keyboard teleop_twist_keyboard.py …

Python学习笔记(一):基础特性

python英文官方文档:https://docs.python.org/3.8/tutorial/index.html 比较不错的python中文文档:https://www.runoob.com/python3/python3-tutorial.html 1. 写在前面 这几周从实践角度又学习了一遍python,温故而知新,还是有蛮多心得的, 周末再看之前记的python笔记,…

vue3绘制广东深圳地图使用echarts

<!-- 饼图 --> <template><el-card><template #header> 地级市分类图 </template><div :id"id" :class"className" :style"{ height, width }"></div></el-card> </template><script …

【算法专题--栈】用栈实现队列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双栈 模拟 队列 &#x1f95d;栈 和 队列 的特性 &#x1f34d;具体思路 &#x1f34d;案例图解 四、总结与提炼 五、共勉 一、前言 用栈实现队列 这道题&#xff0c;可以说是--栈专题--&#xff0c;最经典的一道题&…

昇思MindSpore学习入门-函数式自动微分

函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff08;logits&#xff09;与正确标签&#xff08;label&#xff09;送入损失函数&#xff08;loss function&#xff09;获得loss&#xff0c;然后进行反向传播计算&#xff0c;求得梯度&#…

为何同一PDF文档用不同软件打印效果不同?

通过扫描仪生成的同一PDF文档&#xff0c;同样的设置&#xff0c;为什么别的电脑打出来是白底我的打出来有灰色格子背景&#xff1f;这种情况通常是由于PDF阅读软件的不同造成的差异。 ### 可能的原因和解决方法&#xff1a; 1. **PDF阅读软件的不同**&#xff1a; - **解决方…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…