原文鏈接: "克裡斯的小屋——Python 實現的關鍵詞查找小工具" 引言 平時工作時,有時會遇到這樣的情景:在一個目錄及其子目錄下所有的文本文件中查找某個關鍵字、詞或者完整的句子。當然,如果是在 平臺上, 就能實現這樣的功能。不過最近學習了 相關的知識,自然是想做出一款帶有界面的小工具,可以跨平臺 ...
原文鏈接: 克裡斯的小屋——Python 實現的關鍵詞查找小工具
引言
平時工作時,有時會遇到這樣的情景:在一個目錄及其子目錄下所有的文本文件中查找某個關鍵字、詞或者完整的句子。當然,如果是在Linux
平臺上,find+egrep
就能實現這樣的功能。不過最近學習了Python tkinter
相關的知識,自然是想做出一款帶有界面的小工具,可以跨平臺使用。所以,本文介紹的小工具,主要就是為了鞏固學習到的Python tkinter
知識,同時也是為了方便自己。
涉及的 Python 及 tkinter 的知識
os.walk
函數:負責遍歷目錄下所有的文件;mimetypes.guess_type
函數:負責給出文件的類型,從而過濾出非文本文件;Listbox
組件的使用及滑鼠雙擊事件的綁定;pack
佈局;- 生產者+消費者 線程模型,主線程(GUI)負責消費來自後臺線程搜索得到的文件路徑結果,並及時顯示出來;
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