正则表达式搜索多文件内容

import os
import glob
import re
from optparse import OptionParser

def process_parameters():
    usage = "usage: %prog [options] search_reg_pattern"
    parser = OptionParser(usage)
    parser.add_option("-f", "--file", dest="file", default="*", help="file name to search, glob format")
    parser.add_option("-d", "--dir", dest="dir", default="./", help="dir")
    parser.add_option("-r", "--recursive", action="store_true", dest="recursive", default=False, help="recursive search directory, not support yet")
    parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="print none information during process")
    parser.add_option("-t", "--tofile", dest="tofile", default=None, help="output whole line in the file")
    parser.add_option("-m", "--mfile", dest="mfile", default=None, help="output matched partial string to the file");
    return parser;


def find_file_text(pattern, dir, file, recursive, verbose, tofile, mfile):
    if tofile:
        tofile_path = dir + os.sep + tofile
        tofile_handle = open(tofile_path, 'w')
    if mfile:
        mfile_path = dir + os.sep + mfile;
        mfile_handle = open(mfile_path, 'w')
    match_count = 0;
    glob_str = dir + os.sep + file
    if verbose:
        print "find ", pattern, "in ", glob_str
    for filename in glob.glob(glob_str):
        if not os.path.isdir(filename):
            file_obj=open(filename,'rU')
            line_no=0
            for eachline in file_obj:
                line_no=line_no+1
                matched_list = re.findall(pattern, eachline, re.M|re.I)
                if matched_list:
                    match_count = match_count + 1;
                    if tofile:
                        tofile_handle.write(eachline+'\n')
                    if mfile:
                        for matched in matched_list:
                            mfile_handle.write(matched + '\n')
                    if verbose:
                        print "[%d] %s(%d):%s"%(match_count, filename, line_no, eachline)
    if tofile:
            tofile_handle.close()
                            
 
if __name__ == "__main__":
    parser = process_parameters()
    (options, args) = parser.parse_args()
    if len(args) == 0:
        parser.error("incorrect number of arguments")
    print options, args
    find_file_text(args[0], options.dir, options.file, options.recursive, options.verbose, options.tofile, options.mfile)
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值