Python: python实现grep查找功能

python scott 846℃ 0评论

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

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

代码 grep.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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()

用法:

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

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

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

1
grep.py -p <you_dir> -s <file_filter_re_pattern> -k <key_word_re_pattern>

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

grep.py -p  -s 

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

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

转载请注明:osetc.com » Python: python实现grep查找功能

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址