Python: python实现grep查找功能

python scott 1324℃ 0评论

写这个程序的原因是Windows下的搜索功能不好用,有尝试过下载一下小工具来补偿搜索功能,但都不尽如人意,所以就干脆自己写一个了.

功能:在任何装有python2.7(或2.7以上3.0以下版本)的机器上运行文件名搜索、文件内容搜索.

代码 grep.py:

[cc lang=”python”]
import os
import re
import argparse
def inred( s ):
return”%s[31;2m%s%s[0m>”%(chr(27), s, chr(27))
def parseInput():
parser = argparse.ArgumentParser()
parser.add_argument(“-p>”, nargs=’*’)
parser.add_argument(‘-s’,nargs=’*’)
parser.add_argument(‘-k’,nargs=’*’)
args = parser.parse_args()
return args.p, args.s, args.k
def searchFile(mfile,patterns):
fr = open(mfile,’r’)
line_num = 0
flag = True
while True:
line = fr.readline()
line_num += 1
if line:
for eachp in patterns:
if(eachp.findall(line)):
if flag:
print mfile
flag = False
print “line>”,line_num,line,
else:
break
if not flag:
print “>”
if __name__ == “__main__>”:
mpaths,filefilters,mkeys = parseInput()
if mpaths == None:
mpaths = [os.getcwd()]
print “Search paths:>”,mpaths
print “File filters:>”,filefilters
print “Search keys:>”,mkeys
print “>”
file_pattern = []
key_pattern = []
if filefilters:
for eachff in filefilters:
file_pattern.append(re.compile(eachff,re.I))
if mkeys:
for eachkey in mkeys:
key_pattern.append(re.compile(eachkey,re.I))
for eachp in mpaths:
list_dirs = os.walk(eachp)
for root, dirs, files in list_dirs:
for f in files:
if filefilters != None:
for eachfp in file_pattern:
if(eachfp.findall(f)):
fname = os.path.join(root, f)
if mkeys != None:
searchFile(fname,key_pattern)
else:
print fname
break
elif mkeys != None:
fname = os.path.join(root, f)
searchFile(fname,key_pattern)
else:
print ‘USAGE: -p paths -s file_filters(must be regular expression) -k keys(must be regular expression)’
quit()
[/cc]

用法:

首先确保你的电脑有安装 python27

将grep.py文件放入有被设为环境变量的文件夹,这样可以直接在命令行运行命令.

然后打开命令行,去到你想搜索的目录(或者-p ),运行:

[cc lang=”python”]
grep.py -p -s -k [/cc]

这样就可以查找指定目录下的文件内容,如果你的命令行已经在该目录,则-p选项可选,如果不指定文件名过滤,-s选项可选.如果想直接搜索文件名则可省去-k选项

grep.py -p  -s 

另外,-s和-k选项支持正则表达式,所以要注意使用转义符号,各个选项都支持多参数.

原文:http://linxianyan.cn/python实现linux下grep查找功能/

转载请注明:OSETC 技术网 » Python: python实现grep查找功能

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!