Python 实现的关键词查找小工具

引言

平时工作时,有时会遇到这样的情景:在一个目录及其子目录下所有的文本文件中查找某个关键字、词或者完整的句子。当然,如果是在Linux平台上,find+egrep就能实现这样的功能。不过最近学习了Python tkinter相关的知识,自然是想做出一款带有界面的小工具,可以跨平台使用。所以,本文介绍的小工具,主要就是为了巩固学习到的Python tkinter知识,同时也是为了方便自己。

涉及的 Python 及 tkinter 的知识

  1. os.walk函数:负责遍历目录下所有的文件;
  2. mimetypes.guess_type函数:负责给出文件的类型,从而过滤出非文本文件;
  3. Listbox组件的使用及鼠标双击事件的绑定;
  4. pack布局;
  5. 生产者+消费者 线程模型,主线程(GUI)负责消费来自后台线程搜索得到的文件路径结果,并及时显示出来;
  6. Ubuntu平台下,使用os.system('nautilus file_path)'定位到指定的文件。

功能

  1. 在指定目录及其子目录下所有的文本文件中查找关键字、词和句子;
  2. Ubuntu上支持双击列表项目,自动使用nautilus文件管理器定位到指定位置。

关键代码

完整的小工具源码参见keyword-searcher,以下是搜索部分的代码,比较简单。

def _find(self, path, keyword):
       if not os.path.exists(path):
           return None

       for this_dir, sub_dirs, files in os.walk(path):
           for file in files:
               file_type = guess_type(file)[0]
               if file_type and 'text' in file_type:
                   fp = os.path.join(this_dir, file)
                   self._result_queue.put(fp) if keyword in open(fp).read() else None

运行截图

参考

  • tkinter Listbox组件自动滚动

你可能感兴趣的:(【03,Python,实战】)