用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

#设定两个检索关键词keyword error和cc
keyword1 = 'error'
keyword2 = 'cc'

#设定一个排除的exclude_word bb
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 in exclude_file_name_list :#若文件名有.bak就剔除if my_exclude in my_filename: flag =  Falseif flag: #文件名匹配已经命中i = 0 #i作为文件行号#逐行读取文件,碰到特大文件就不会卡死程序for line in open ( full_filepath ) : i=i+1 #每次读一行,i+1#判断关键字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 #打印该行#当前完整路径不是文件,而是文件夹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) #调用函数开始搜索

转载于:https://blog.51cto.com/14075497/2343362

用python编写一个高效搜索代码工具相关推荐

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

    用python编写一个高效搜索代码工具 大多码农在linux环境下使用grep+关键词的命令搜索自己想要的代码或者log文件.今天介绍用python如何编写一个更强大的搜索工具,windows下也适用 ...

  2. 使用Python编写一个渗透测试探测工具

    本篇将会涉及: 资源探测 一个有用的字典资源 第一个暴力探测器 文章首发:zmister.com/archives/18- 资源探测 资源探测在渗透测试中还是属于资源的映射和信息的收集阶段. 主要有以 ...

  3. python代码扫描工具_用Python编写一个高效的端口扫描器的方法

    PyPortScanner python多线程端口扫描器. 输出示例: Github 背景 有时候,在进行网络相关的研究的时候,我们需要执行一些有目的的参数测量.而端口扫描就是其中比较普遍也比较重要的 ...

  4. Python编写一个简单的百度搜索应用

    由于天气因素,无法外出,在家闲来无事,使用Python编写一个简单的百度搜索应用. 功能:打开默认浏览器,使用百度进行搜索 Python:2.7.13 第三方库:pyinstaller(打包软件) 工 ...

  5. 用python朗读字母-使用python编写一个语音朗读闹钟功能的示例代码

    想找一个可以播放文字的闹钟找不到,自己写一个更简单.TTS实现由很多种办法,百度等都提供了API接口,但类似百度,需要先注册等一系列动作. 其实windows自带的win32com功能可以简单实现TT ...

  6. python在线朗读-使用python编写一个语音朗读闹钟功能的示例代码

    想找一个可以播放文字的闹钟找不到,自己写一个更简单.TTS实现由很多种办法,百度等都提供了API接口,但类似百度,需要先注册等一系列动作. 其实windows自带的win32com功能可以简单实现TT ...

  7. Python番外篇:教你如何编写一个GIF录屏工具

    hello,大家好,我是wangzirui32,今天我们来学习如何编写一个GIF录屏工具,开始学习吧! 1. 项目准备 我们需要PIL库对屏幕进行截取,使用imageio对截取的图像进行拼接,合成为G ...

  8. python闹钟源码_使用python编写一个语音朗读闹钟功能的示例代码

    想找一个可以播放文字的闹钟找不到,自己写一个更简单.TTS实现由很多种办法,百度等都提供了API接口,但类似百度,需要先注册等一系列动作. 其实windows自带的win32com功能可以简单实现TT ...

  9. python 语音朗读软件下载_使用python编写一个语音朗读闹钟功能的示例代码

    想找一个可以播放文字的闹钟找不到,自己写一个更简单.TTS实现由很多种办法,百度等都提供了API接口,但类似百度,需要先注册等一系列动作. 其实windows自带的win32com功能可以简单实现TT ...

最新文章

  1. SpringBoot框架(4)-- 类装配及Bean装配监听器
  2. 【星球知识卡片】深度学习图像降噪有哪些关键技术点,如何学习
  3. Mysql学习笔记【一、环境安装配置】
  4. JMeter入门教程(自己做测试了)
  5. 同方专转本计算机视频,同方2011专转本计算机
  6. Web SQL介绍,web sql中增删改查、数据存储位置、运行脚本、建表建库
  7. Django Admin后台管理功能使用
  8. 数据--第22课 - 队列的定义及实现
  9. 红外线解码 VS1838B接头 12864液晶 51单片机 合众之星万能遥控器
  10. oh-my-zsh主题添加命令显示执行时间和当前时间
  11. python求斜边上的高_直角三角形斜边上的高如何求?
  12. 如何从课堂派上扒取直播视频
  13. 虚拟现实(VR)、增强现实(AR)、混合现实(MR)
  14. 三天搞定射频识别技术(二)2.3寻卡防冲突选卡
  15. 基于51单片机的脉搏心率心跳血压体温测量检测仿真(仿真+原理图+源码+论文)
  16. VMware下OSSIM 5.2.0的下载、安装和初步使用(图文详解)
  17. 影视剧广告植入,对于品牌宣传有怎样的效果?
  18. 计算机组成:浅析短转移、近转移、远转移
  19. IRIS(Incorporated Research Institutions for Seismology)常用功能介绍
  20. 304状态码详解(协商缓存)

热门文章

  1. DataTables实现rowspan思路
  2. ESP8266 问题
  3. iframe子页面点击按钮,执行父页面的点击事件
  4. 如何使用应用程序库缓存
  5. 五、curator recipes之选举主节点Leader Latch
  6. OpenStack Pike Minimal安装:二、身份认证
  7. 【OSS 排查方案-5】透过现象看本质之网络排查分析
  8. 嘉兴新型智慧城市建设带来的三个问号
  9. 精益 React 学习指南 (Lean React)- 3.4 掌控 redux 异步
  10. 延迟加载图片并监听图片加载完成