文件内容搜索工具 - Python实现

在本篇文章中,我们将介绍如何使用 wxPython 库创建一个简单的文件搜索工具。这个工具允许用户选择一个文件夹,并在该文件夹中的所有 .py 文件中查找指定的文字,并显示匹配的位置。
C:\pythoncode\blog\searchwordinpyfile.py

在这里插入图片描述

代码实现

我们首先导入必要的模块:

import os
import wx

接下来,我们定义一个名为 SearchFrame 的类,这个类继承自 wx.Frame,用于创建搜索工具的主窗口。

class SearchFrame(wx.Frame):def __init__(self, parent, title):super(SearchFrame, self).__init__(parent, title=title, size=(400, 400))# 创建界面元素self.panel = wx.Panel(self)# ... 省略其他界面元素的创建和布局代码 ...# 绑定按钮点击事件self.folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)self.search_button.Bind(wx.EVT_BUTTON, self.on_search)# ... 省略其他事件处理函数的实现 ...# 创建应用程序对象
app = wx.App()
frame = SearchFrame(None, title="文件搜索")
frame.Show()# 运行应用程序主循环
app.MainLoop()

以上代码中,我们创建了一个 SearchFrame 类,并在其构造函数中初始化界面元素,并绑定了按钮的点击事件。接下来,我们定义了两个事件处理函数 on_select_folderon_search,分别用于处理选择文件夹按钮和搜索按钮的点击事件。

on_select_folder 函数中,我们使用 wx.DirDialog 创建了一个选择文件夹的对话框,并获取用户选择的文件夹路径。

on_search 函数中,我们首先获取用户选择的文件夹路径和搜索文字,然后遍历指定文件夹下的所有 .py 文件,打开每个文件并读取内容,查找是否包含搜索文字,如果存在匹配,则记录匹配的位置。

最后,我们创建了一个 wxPython 的 App 对象,并创建了一个 SearchFrame 实例,并显示在界面上。通过调用 app.MainLoop(),我们使程序进入事件处理循环,等待用户的操作。

全部代码

import os
import wxclass SearchFrame(wx.Frame):def __init__(self, parent, title):super(SearchFrame, self).__init__(parent, title=title, size=(400, 400))# 创建界面元素self.panel = wx.Panel(self)self.folder_button = wx.Button(self.panel, label="选择文件夹")self.search_label = wx.StaticText(self.panel, label="搜索文字:")self.search_text = wx.TextCtrl(self.panel)self.search_button = wx.Button(self.panel, label="搜索")self.memo = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE)# 设置界面布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.folder_button, 0, wx.ALL, 5)sizer.Add(self.search_label, 0, wx.ALL, 5)sizer.Add(self.search_text, 0, wx.EXPAND|wx.ALL, 5)sizer.Add(self.search_button, 0, wx.ALL, 5)sizer.Add(self.memo, 1, wx.EXPAND|wx.ALL, 5)self.panel.SetSizer(sizer)# 绑定按钮点击事件self.folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)self.search_button.Bind(wx.EVT_BUTTON, self.on_search)def on_select_folder(self, event):dialog = wx.DirDialog(self, "选择文件夹", style=wx.DD_DEFAULT_STYLE)if dialog.ShowModal() == wx.ID_OK:folder_path = dialog.GetPath()self.folder_button.SetLabel(folder_path)dialog.Destroy()def on_search(self, event):folder_path = self.folder_button.GetLabel()search_text = self.search_text.GetValue()matches = []# 遍历指定文件夹下的所有 .py 文件for root, dirs, files in os.walk(folder_path):for file in files:if file.endswith(".py"):file_path = os.path.join(root, file)with open(file_path, "r", encoding="utf-8") as f:content = f.read()if search_text in content:match_positions = [pos for pos in range(len(content)) if content.startswith(search_text, pos)]matches.append((file_path, match_positions))# 在 Memo 组件中显示找到的文件名和文字位置# self.memo.Clear()for match in matches:file_path, positions = matchself.memo.AppendText(f"文件名: {file_path}\n")for position in positions:self.memo.AppendText(f"文字位置: {position}\n")self.memo.AppendText("\n")# 创建应用程序对象
app = wx.App()
frame = SearchFrame(None, title="文件搜索")
frame.Show()# 运行应用程序主循环
app.MainLoop()

总结

通过使用 wxPython 库,我们创建了一个简单的文件搜索工具,实现了选择文件夹、输入搜索文字并点击搜索按钮的功能。在指定的文件夹中,我们遍历了所有的 .py 文件,并查找包含搜索文字的位置,将结果显示在界面上。

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

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

相关文章

Android 场景Scene的使用

Scene 翻译过来是场景,开发者提供起始布局和结束布局,就可以实现布局之间的过渡动画。 具体可参考 使用过渡为布局变化添加动画效果 大白话,在 Activity 的各个页面之间切换,会带有过渡动画。 打个比方,使用起来类似…

点亮社交新篇章:探索 WeTalk 新增的头像与群聊功能

目录 引言: 引入头像功能: 头像功能的优势: 引入群聊功能: 群聊功能的优势: 引入头像功能: 查看头像: ​编辑 上传头像: 引入群聊功能: 创建群聊&#xff1a…

八月更新 | CI 构建计划触发机制升级、制品扫描 SBOM 分析功能上线!

点击链接了解详情 这个八月,腾讯云 CODING DevOps 对持续集成、制品管理、项目协同、平台权限等多个产品模块进行了升级改进,为用户提供更灵活便捷的使用体验。以下是 CODING 新功能速递,快来看看是否有您期待已久的功能特性: 01…

RabbitMq-3入门案例

rabbitmq入门 1.生产者&#xff08;服务提供方&#xff09; //依赖<dependencies> <!-- rabbitmq客户端依赖--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0<…

什么是链表,前端如何理解链表

一、什么是链表 多个元素存储的列表链表中的元素在内存中不是顺序存储的&#xff0c;而是通过“next”指针联系在一起的。 JS中的原型链 原理就是 链表结构 链表结构 {key: "A",next: {key: "B",next: {key: "C",next: null}} } //原型链 //对…

数电票红利悄然而至 百望云数据驱引“供应链协同”新纪元

2023年&#xff0c;全面数字化的电子发票政策正如飞驰的列车在各地试点推广中加速前行&#xff0c;“以数治税”的全新时代即将来临&#xff0c;基于数电票赋能的企业数字化红利正在悄然释放。借着政策快速落地的东风&#xff0c;财税数字化也进入到全面建设的新周期&#xff0…

微服务流程引擎:简单又灵活,实现流程全生命周期管理!

伴随着日益激烈的市场竞争&#xff0c;传统的办公操作已经无法满足发展需要了。如果采用微服务流程引擎加油助力&#xff0c;就可以帮助企业更好地管理数据资源&#xff0c;高效做好各种表单制作&#xff0c;实现高效率办公。流辰信息以市场为导向&#xff0c;用心钻研低代码技…

C++设计模式(工厂方法模式)

文章目录 前言一、工厂方法模式介绍二、工厂方法模式和简单工厂模式对比三、工厂方法模式适用场景四、工厂方法模式示例代码总结 前言 本篇文章来带大家学习C中的工厂方法模式。 一、工厂方法模式介绍 工厂方法模式是一种创建型设计模式&#xff0c;用于通过工厂方法创建对象…

C++ string 类

文章目录 引用头文件初始化赋值1. 空串2. 拷贝复制3. 直接初始化赋值4. 单个字符初始化 遍历 string 类1. 下标索引遍历2. 迭代器遍历3. 使用 range for 循环遍历字符串&#xff08;需要 C11 或更新的版本&#xff09; string 常用方法判断字符串是否为空串获取字符串中字符个数…

数据中台容易失败的20多种原因全部在这里了

数据中台失败的原因总结 在当今数字化转型的浪潮中&#xff0c;数据中台作为关键的战略举措被越来越多的企业所关注和实施。然而&#xff0c;数据中台项目的实施过程中并不乏失败案例&#xff0c;这引业界对于数据中台失败原因的深入思考和分析。通过一些公开的信息和数据&…

如何使用海艺人工智能生成创意汉字

1、用某种字体生成文字。 jf storehttps://store.justfont.com/fonts 2、打开seaart。ai网站。https://www.seaart.ai/home 3、效果如下。 4、右键保存图片。

【算法日志】动态规划刷题:路径数问题(day34)

代码随想录刷题60Day 目录 前言 不同路径 不同路径(2) 前言 今天的动态规划题与昨天的题很类似&#xff0c;只不过今天的题是在二维上讨论&#xff0c;难度上略有提升。 不同路径 int uniquePaths(int m, int n) {vector<int> dp(n 1, 1);for (int i 1; i < m; …

C语言:选择+编程(每日一练Day7)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;图片整理 思路一&#xff1a; 思路二&#xff1a; 题二&#xff1a;寻找数组的中心下标 思路一&#xff1…

高阶数据结构跳表

"想象为翼&#xff0c;起飞~" 跳表简介&#xff1f; skiplist本质上是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是 一样的&#xff0c;可以作为key或者key/value的查找模型。 跳表由来 skiplist是由美国计算…

Matplotlib数据可视化(五)

目录 1.绘制折线图 2.绘制散点图 3.绘制直方图 4.绘制饼图 5.绘制箱线图 1.绘制折线图 import matplotlib.pyplot as plt import numpy as np %matplotlib inline x np.arange(9) y np.sin(x) z np.cos(x) # marker数据点样式&#xff0c;linewidth线宽&#xff0c;li…

Fegin异步情况丢失上下文问题

在微服务的开发中&#xff0c;我们经常需要服务之间的调用&#xff0c;并且为了提高效率使用异步的方式进行服务之间的调用&#xff0c;在这种异步的调用情况下会有一个严重的问题&#xff0c;丢失上文下 通过以上图片可以看出异步丢失上下文的原因是不在同一个线程&#xff0c…

基于React实现日历组件详细教程

前言 日历组件是常见的日期时间相关的组件&#xff0c;围绕日历组件设计师做出过各种尝试&#xff0c;展示的形式也是五花八门。但是对于前端开发者来讲&#xff0c;主要我们能够掌握核心思路&#xff0c;不管多么奇葩的设计我们都能够把它做出来。 本文将详细分析如何渲染一…

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…

解决Oracle中XML插入数据时的空格问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码&#xff1a;含电热联合系统的微电网运行优化 关键词&#xff1a;微网 电热联合系统 优化调度 参考文档&#xff1a;《含电热联合系统的微电网运行优化》完全复现 仿真平台&#xff1a;MATLAB yalmipcplex [火]主要内容&#xf…