用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编写一个高效搜索代码工具相关推荐

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

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

  2. python 爬取软件_用Python爬取了三大相亲软件评论区,结果...

    小三:怎么了小二?一副愁眉苦脸的样子. 小二:唉!这不是快过年了吗,家里又催相亲了 ... 小三:现在不是流行网恋吗,你可以试试相亲软件呀. 小二:这玩意靠谱吗? 小三:我也没用过,你自己看看软件评论 ...

  3. python 表格处理软件_基于Python的Excel处理工具

    1项目描述# #的辛勤工作,以减少处理Excel在我姐姐的工作中,我写了一些代码处理xlsx在python中独立完成一些任务,如判断未来的列表,晚了,每天和早期离开根据考勤记录,并实现两个细胞的比较复 ...

  4. python实现数据恢复软件_恢复python

    centos 7 python2.7.5升级到3.5.2 centos 7 python2.7.5升级到3.5.2 下载python3.5.2 wget https://www.python.org/ ...

  5. python 工资管理软件_使用Python计算公司所有员工的薪资报表,核算

    前言 本篇内容,让你完全掌握Python是如何自动化办公的~ 使用Python 读取Excel 中单元格的数据,自动核算每位员工的业绩提成.个税和实发工资. 一.环境准备 1.1  Python 3. ...

  6. python制作电脑软件_利用PYTHON制作桌面版爬虫软件(二)

    今天继续新的专题.主要讲解[利用PYTHON制作桌面版爬虫软件]下的如何实现界面功能(一).该讲主要包括以下三个内容:掌握如何编写主函数,运行界面. 了解pywin32模块. 如何用python识别Q ...

  7. python开发笔记软件_图解Python编程神器Jupyter Notebook

    大家好!在本门课程中我会给大家详细讲解鼎鼎大名的Python编程神器Jupyter Notebook.Jupyter Notebook看似简单,实际上功能非常强大,而且有很多实用的小技巧.遗憾的是,目 ...

  8. 初学python选择哪个软件_初学 Python 需要安装哪些软件?

    写程序最好用的当然是记事本啦! 什么是 Python? Python 早在 1989 年由荷兰小伙 Guido van Rossum 发明,并于两年之后公开发行. Python 是一种面向对象.具有动 ...

  9. python 工资管理软件_基于[Python]的员工管理系统

    基于[Python]的员工管理系统 -------------------------------- 简介 使用python语言来完成一个员工管理系统,员工信息包含:员工工号,姓名, 年龄,性别,职位 ...

最新文章

  1. ASIC开发设计流程
  2. r语言读取excel数据_R语言操纵Excel进行数据透视与批处理
  3. RedHat虚拟机安装VMware Tools
  4. android第三方代码,Android--第三方控件--okHttp(示例代码)
  5. powerbi视觉对象_玩转Power BI的图片可视化
  6. 分类问题的模型评估指标总结
  7. 计算机语言学 自然语言处理程序,利用知网进行(计算机)自然语言处理
  8. border属性的三要素
  9. Spring中的Environment
  10. 李宏毅自然语言处理——GPT3简介
  11. python 输出数据到excel设置超链接及格式设置
  12. TCP中的RST标志(Reset)详解
  13. Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
  14. 使用python判断一个数是否为素数
  15. 尚硅谷-康师傅-MySQL详细笔记(1-9章)
  16. 微信小程序的wxml实现复杂运算或者数据处理
  17. 幼儿园监控_透明装饰_安全工地_放心食堂_多媒体教室基于视频流媒体能力解决方案
  18. 人贵有自知力和自制力...
  19. 大数据NiFi(七):NiFi集群页面管理节点操作
  20. MySQL——DDL、DML、DQL、DCL语法总结

热门文章

  1. TensorRT(5)-INT8校准原理
  2. 主成分分析法(PCA)原理漫谈
  3. Requests请求库
  4. 重学前端-js的类型问题
  5. IDEA 一直不停的scanning files to index解决办法
  6. Python 工匠:编写条件分支代码的技巧
  7. python中的数据类型,存储,实现
  8. 搭建Python+Eclipse开发环境
  9. 遍历DOM元素的children属性遇到的坑
  10. svn服务器基本知识及搭建