真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

用python編寫一個高效搜索代碼工具

用python編寫一個高效搜索代碼工具
大多碼農(nóng)在linux環(huán)境下使用grep+關(guān)鍵詞的命令搜索自己想要的代碼或者log文件。今天介紹用python如何編寫一個更強大的搜索工具,windows下也適用。
我們的需求:
1, 可以同時指定多個關(guān)鍵詞。比如某個文件某一行中有”error: aa bb cc”,如果檢索關(guān)鍵詞error和cc則可以顯示該行,避免單一關(guān)鍵詞冗余信息太多
2, 可以排除某些關(guān)鍵詞。對于”error: aa bb cc” ,如果設(shè)定排除bb,則不予顯示該行
3, 可以指定某些文件名或者文件名后綴,如只搜索 .cpp和 .h 的文件
4, 可以排除某些文件名或者后綴,比如排除 .log 和 .bak
5, 最重要一點,和grep一樣,必須能夠遞歸查找,只要指定一個目錄,則自動逐層搜索該目錄下所有的子文件夾,文件
6, 最后能打印出吻合的文件完整路徑,能顯示搜索到的行號

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出彭水苗族土家族免費做網(wǎng)站回饋大家。

為了實現(xiàn)以上功能,我們需要用到python自帶的os庫函數(shù),功能強大,先把用到的幾個先做簡單說明:
os.path.exists ( xxx ) 判斷路徑xxx是否存在
os.listdir ( xxx ) 把xxx路徑下所有文件和文件夾名字轉(zhuǎn)換成一個list列表
os.path.join ( aaa, bbb ) 把字符串a(chǎn)aa和bbb拼接成一個完整的文件絕對路徑
os.path.isfile (xxx) 判斷xxx是不是一個文件
os.path.isdir (xxx) 判斷xxx是不是一個文件夾

以下是代碼正文

-- coding: cp936 --

#代碼準(zhǔn)備工作
#由于需要獲得文件的路徑,所以要加載 os和system庫
import os
import sys

#設(shè)定兩個檢索關(guān)鍵詞keyword error和cc
keyword1 = 'error'
keyword2 = 'cc'

#設(shè)定一個排除的exclude_word bb
exclude_word = 'bb'

#設(shè)定一組指定的文件名,使用list結(jié)構(gòu)以便動態(tài)擴(kuò)展
file_name_list = [ '.sv', '.v', '.cpp', '.h']

#設(shè)定不參與檢索的文件名,也使用list結(jié)構(gòu)
exclude_file_name_list = [ '.bak ' ]

#指定一個search_path路徑,把字符串留空,只初始化,為了實現(xiàn)在konsole界面實時捕捉當(dāng)前路徑
search_path = ' '

#準(zhǔn)備工作完畢

#下面創(chuàng)建一個my_search函數(shù),目的是為了實現(xiàn)遞歸查找子文件夾
#如果只需要查找當(dāng)前目錄層次的文件,則可以不使用函數(shù)
#傳入?yún)?shù)為當(dāng)前路徑,為了實現(xiàn)遞歸查找子文件夾
def my_search ( search_path ):

#防錯機(jī)制,判斷當(dāng)前路徑是否存在
if  os.path.exists( search_path ) :

    #獲得路徑下所有文件文件夾的名字,并for循環(huán)遍歷
    for  my_filename  in  os.listdir ( search_path ):

        #把當(dāng)前路徑和文件名拼接成完整絕對路徑
        full_filepath = os.path.join ( search_path,  my_filename )

        #判斷拼接出的完整路徑是文件還是文件夾
        if os.path.isfile (full_filepath):

            #如果是文件,則對file_name_list中期望的文件名進(jìn)行遍歷
            for my_extend in file_name_list :

                #判斷.cpp .sv等在文件名中
                if my_extend in my_filename : 
                    flag = True

                    #對exclude_file_name_list中不希望的文件名進(jìn)行遍歷
                    for my_exclude in exclude_file_name_list :
                        #若文件名有.bak就剔除
                        if my_exclude in my_filename: 
                            flag =  False

                    if flag: #文件名匹配已經(jīng)命中
                        i = 0 #i作為文件行號

                        #逐行讀取文件,碰到特大文件就不會卡死程序
                        for line in open ( full_filepath ) : 
                            i=i+1 #每次讀一行,i+1

                            #判斷關(guān)鍵字1和2(error, cc)在該行中,并且exclude_word(bb)不在該行
                            if (keyword1 in line) and (keyword2 in line) and (exclude_word not in line):

                                #滿足檢索條件,打印文件完整路徑,行號
                                print full_filepath , 'line',i,':' 
                                print line #打印該行

        #當(dāng)前完整路徑不是文件,而是文件夾
        if os.path.isdir (full_filepath) :

            #執(zhí)行函數(shù)遞歸,繼續(xù)到下一層文件夾目錄查找,直到底層文件
            my_search(full_filepath)  

else : #防錯機(jī)制,當(dāng)前路徑不存在,則報錯
    print search_path, 'path not exist!'

#這里相當(dāng)于C語言主函數(shù),程序從這里開始執(zhí)行

search_path = os.getcwd () #從konsole獲得當(dāng)前路徑,設(shè)為搜索路徑
print search_path
my_search (search_path) #調(diào)用函數(shù)開始搜索


本文題目:用python編寫一個高效搜索代碼工具
鏈接分享:http://weahome.cn/article/pgdisj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部