日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

搜索python代码的软件_用python编写一个高效搜索代码工具

發布時間:2024/9/19 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索python代码的软件_用python编写一个高效搜索代码工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

大多碼農在linux環境下使用grep+關鍵詞的命令搜索自己想要的代碼或者log文件。今天介紹用python如何編寫一個更強大的搜索工具,windows下也適用。

我們的需求:

1, 可以同時指定多個關鍵詞。比如某個文件某一行中有”error: aa bb cc”,如果檢索關鍵詞error和cc則可以顯示該行,避免單一關鍵詞冗余信息太多

2, 可以排除某些關鍵詞。對于”error: aa bb cc” ,如果設定排除bb,則不予顯示該行

3, 可以指定某些文件名或者文件名后綴,如只搜索.cpp和 .h 的文件

4, 可以排除某些文件名或者后綴,比如排除 .log 和 .bak

5, 最重要一點,和grep一樣,必須能夠遞歸查找,只要指定一個目錄,則自動逐層搜索該目錄下所有的子文件夾,文件

6, 最后能打印出吻合的文件完整路徑,能顯示搜索到的行號

為了實現以上功能,我們需要用到python自帶的os庫函數,功能強大,先把用到的幾個先做簡單說明:

os.path.exists ( xxx ) 判斷路徑xxx是否存在

os.listdir ( xxx ) 把xxx路徑下所有文件和文件夾名字轉換成一個list列表

os.path.join ( aaa, bbb ) 把字符串aaa和bbb拼接成一個完整的文件絕對路徑

os.path.isfile (xxx) 判斷xxx是不是一個文件

os.path.isdir (xxx) 判斷xxx是不是一個文件夾

以下是代碼正文

# -*- coding: cp936 -*-

#代碼準備工作

#由于需要獲得文件的路徑,所以要加載 os和system庫

import os

import sys

#設定兩個檢索關鍵詞keyworderror和cc

keyword1 = 'error'

keyword2 = 'cc'

#設定一個排除的exclude_wordbb

exclude_word = 'bb'

#設定一組指定的文件名,使用list結構以便動態擴展

file_name_list = [ '.sv', '.v', '.cpp','.h']

#設定不參與檢索的文件名,也使用list結構

exclude_file_name_list = [ '.bak ' ]

#指定一個search_path路徑,把字符串留空,只初始化,為了實現在konsole界面實時捕捉當前路徑

search_path = ' '

#準備工作完畢

#下面創建一個my_search函數,目的是為了實現遞歸查找子文件夾

#如果只需要查找當前目錄層次的文件,則可以不使用函數

#傳入參數為當前路徑,為了實現遞歸查找子文件夾

def my_search ( search_path ):

#防錯機制,判斷當前路徑是否存在

if os.path.exists( search_path ):

#獲得路徑下所有文件文件夾的名字,并for循環遍歷

for my_filename in os.listdir ( search_path ):

#把當前路徑和文件名拼接成完整絕對路徑

full_filepath = os.path.join ( search_path, my_filename )

#判斷拼接出的完整路徑是文件還是文件夾

if os.path.isfile (full_filepath):

#如果是文件,則對file_name_list中期望的文件名進行遍歷

for my_extend in file_name_list:

#判斷.cpp.sv等在文件名中

if my_extend in my_filename:

flag = True

#對exclude_file_name_list中不希望的文件名進行遍歷

for my_exclude inexclude_file_name_list :

#若文件名有.bak就剔除

if my_exclude inmy_filename:

flag = False

if flag: #文件名匹配已經命中

i = 0 #i作為文件行號

#逐行讀取文件,碰到特大文件就不會卡死程序

for line in open (full_filepath ) :

i=i+1 #每次讀一行,i+1

#判斷關鍵字1和2(error, cc)在該行中,并且exclude_word(bb)不在該行

if (keyword1in line) and (keyword2 in line) and (exclude_word not in line):

#滿足檢索條件,打印文件完整路徑,行號

printfull_filepath , 'line',i,':'

print line#打印該行

#當前完整路徑不是文件,而是文件夾

if os.path.isdir (full_filepath) :

#執行函數遞歸,繼續到下一層文件夾目錄查找,直到底層文件

my_search(full_filepath)

else : #防錯機制,當前路徑不存在,則報錯

print search_path, 'path not exist!'

#這里相當于C語言主函數,程序從這里開始執行

search_path = os.getcwd () #從konsole獲得當前路徑,設為搜索路徑

print search_path

my_search (search_path) #調用函數開始搜索

總結

以上是生活随笔為你收集整理的搜索python代码的软件_用python编写一个高效搜索代码工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。