平时工作时,有时会遇到这样的情景:在一个目录及其子目录下所有的文本文件中查找某个关键字、词或者完整的句子。当然,如果是在Linux
平台上,find+egrep
就能实现这样的功能。不过最近学习了Python tkinter
相关的知识,自然是想做出一款带有界面的小工具,可以跨平台使用。所以,本文介绍的小工具,主要就是为了巩固学习到的Python tkinter
知识,同时也是为了方便自己。
os.walk
函数:负责遍历目录下所有的文件;mimetypes.guess_type
函数:负责给出文件的类型,从而过滤出非文本文件;Listbox
组件的使用及鼠标双击事件的绑定;pack
布局;Ubuntu
平台下,使用os.system('nautilus file_path)'
定位到指定的文件。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