用python编写一个高效搜索代码工具
用python編寫(xiě)一個(gè)高效搜索代碼工具
大多碼農(nóng)在linux環(huán)境下使用grep+關(guān)鍵詞的命令搜索自己想要的代碼或者log文件。今天介紹用python如何編寫(xiě)一個(gè)更強(qiáng)大的搜索工具,windows下也適用。
我們的需求:
1, 可以同時(shí)指定多個(gè)關(guān)鍵詞。比如某個(gè)文件某一行中有”error: aa bb cc”,如果檢索關(guān)鍵詞error和cc則可以顯示該行,避免單一關(guān)鍵詞冗余信息太多
2, 可以排除某些關(guān)鍵詞。對(duì)于”error: aa bb cc” ,如果設(shè)定排除bb,則不予顯示該行
3, 可以指定某些文件名或者文件名后綴,如只搜索 .cpp和 .h 的文件
4, 可以排除某些文件名或者后綴,比如排除 .log 和 .bak
5, 最重要一點(diǎn),和grep一樣,必須能夠遞歸查找,只要指定一個(gè)目錄,則自動(dòng)逐層搜索該目錄下所有的子文件夾,文件
6, 最后能打印出吻合的文件完整路徑,能顯示搜索到的行號(hào)
為了實(shí)現(xiàn)以上功能,我們需要用到python自帶的os庫(kù)函數(shù),功能強(qiáng)大,先把用到的幾個(gè)先做簡(jiǎn)單說(shuō)明:
os.path.exists ( xxx ) 判斷路徑xxx是否存在
os.listdir ( xxx ) 把xxx路徑下所有文件和文件夾名字轉(zhuǎn)換成一個(gè)list列表
os.path.join ( aaa, bbb ) 把字符串a(chǎn)aa和bbb拼接成一個(gè)完整的文件絕對(duì)路徑
os.path.isfile (xxx) 判斷xxx是不是一個(gè)文件
os.path.isdir (xxx) 判斷xxx是不是一個(gè)文件夾
以下是代碼正文
-- coding: cp936 --
#代碼準(zhǔn)備工作
#由于需要獲得文件的路徑,所以要加載 os和system庫(kù)
import os
import sys
#設(shè)定兩個(gè)檢索關(guān)鍵詞keyword error和cc
keyword1 = 'error'
keyword2 = 'cc'
#設(shè)定一個(gè)排除的exclude_word bb
exclude_word = 'bb'
#設(shè)定一組指定的文件名,使用list結(jié)構(gòu)以便動(dòng)態(tài)擴(kuò)展
file_name_list = [ '.sv', '.v', '.cpp', '.h']
#設(shè)定不參與檢索的文件名,也使用list結(jié)構(gòu)
exclude_file_name_list = [ '.bak ' ]
#指定一個(gè)search_path路徑,把字符串留空,只初始化,為了實(shí)現(xiàn)在konsole界面實(shí)時(shí)捕捉當(dāng)前路徑
search_path = ' '
#準(zhǔn)備工作完畢
#下面創(chuàng)建一個(gè)my_search函數(shù),目的是為了實(shí)現(xiàn)遞歸查找子文件夾
#如果只需要查找當(dāng)前目錄層次的文件,則可以不使用函數(shù)
#傳入?yún)?shù)為當(dāng)前路徑,為了實(shí)現(xiàn)遞歸查找子文件夾
def my_search ( search_path ):
#這里相當(dāng)于C語(yǔ)言主函數(shù),程序從這里開(kāi)始執(zhí)行
search_path = os.getcwd () #從konsole獲得當(dāng)前路徑,設(shè)為搜索路徑
print search_path
my_search (search_path) #調(diào)用函數(shù)開(kāi)始搜索
轉(zhuǎn)載于:https://blog.51cto.com/14075497/2343362
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的用python编写一个高效搜索代码工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言学习目录
- 下一篇: python网络编程基础(线程与进程、并