Python脚本程序实现搜索文本文件内容_本地文本搜关键词代码-程序员宅基地

本文介绍用Python实现的搜索本地文本文件内容的小程序。从而学习Python I/O方面的知识。代码如下:

import os

#根据文件扩展名判断文件类型
def endWith(s,*endstring):
    array = map(s.endswith,endstring)
    if True in array:
        return True
    else:
        return False

#将全部已搜索到的关键字列表中的内容保存到result.log文件中
def writeResultLog(allExistsKeywords):
    #行分隔符
    ls = os.linesep
    #结果日志文件名
    logfilename = "result.log" #相对路径,文件在.py文件所在的目录中
    try:
        fobj = open(logfilename,'w')
    except IOError,e:
        print "*** file open error:",e
    else:
        fobj.writelines(['%s%s' % (keyword,ls) for keyword in allExistsKeywords])
        fobj.close()    


#搜索指定关键字是否在指定的文件中存在
def searchFilesContent(dirname):
    #从searchkeywords.txt文件中初始化待搜索关键字列表
    filename = "searchkeywords.txt" #相对路径,文件在.py文件所在的目录中
    #待搜索关键字列表
    allSearchKeywords=[]
    #遍历文件当前行已搜索到的关键字列表
    existsKeywordsThisLine=[]
    #全部已搜索到的关键字列表
    allExistsKeywords=[]

    try:
        fobj = open(filename,'r');
    except IOError,e:
        print "*** file open error:",e
    else:
        for eachLine in fobj:
            allSearchKeywords.append(eachLine.strip('\n')); #使用strip函数去除每行的换行符
        fobj.close();

    #从excludekeywords.txt文件中初始化要排除的搜索关键字列表
    filename = "excludekeywords.txt" #相对路径,文件在.py文件所在的目录中
    #要排除的搜索关键字列表
    allExcludedKeywords=[]
    try:
        fobj = open(filename,'r');
    except IOError,e:
        print "*** file open error:",e
    else:
        for eachLine in fobj:
            allExcludedKeywords.append(eachLine.strip('\n')); #使用strip函数去除每行的换行符
        fobj.close();

    #从全部已搜索到的关键字列表排除掉不用搜索的关键字
    for excluedkw in allExcludedKeywords:
        if(excluedkw in allSearchKeywords):
            allSearchKeywords.remove(excluedkw);


    #遍历打开所有要在其中搜索内容的文件,若待搜索关键字列表为空,则不再继续遍历
    for root,dirs,files in os.walk(dirname):
        for file in files:
            if endWith(file,'.java','.xml','.properties'): #只在扩展名为.java/.xml/.properties文件中搜索
                #打开文件
                filename = root + os.sep + file #绝对路径
                filename = filename.replace("\\","\\\\") #将路径中的单反斜杠替换为双反斜杠,因为单反斜杠可能会导致将路径中的内容进行转义了,replace函数中"\\"表示单反斜杠,"\\\\"表示双反斜杠
                try:
                    fobj = open(filename,'r');
                except IOError,e:
                    print "*** file open error:",e
                else:
                    #遍历文件的每一行
                    for fileLine in fobj:
                        #判断当前行是否包含所有搜索关键字
                        for keyword in allSearchKeywords:
                            #若包含,并添加到该行已搜索到的关键字列表中
                            if keyword.upper() in fileLine.upper(): #将搜索关键字和该行文本内容都转换为大写后再进行匹配
                                existsKeywordsThisLine.append(keyword)

                        #将这些搜索到的关键字添加到全部已搜索到的关键字列表中,并包含文件名信息
                        for keyword in existsKeywordsThisLine:
                            allExistsKeywords.append(keyword+"\t"+filename.replace("\\\\","\\"))

                        #将这些搜索到的关键字从待搜索关键字列表中移除(后续将不再搜索该关键字)
                        for keyword in existsKeywordsThisLine:
                            allSearchKeywords.remove(keyword)

                        #清空该行已搜索到的关键字列表内容
                        existsKeywordsThisLine = []

                        #若所有的关键字都搜索到了,则记录日志文件,并结束搜索工作
                        if len(allSearchKeywords)==0:
                            fobj.close();
                            writeResultLog(allExistsKeywords)
                            print "DONE!",
                            return
                    fobj.close();

    #全部文件遍历结束
    writeResultLog(allExistsKeywords)
    print "DONE!",



#仅当本python模块直接执行时,才执行如下语句,若被别的python模块引入,则不执行
if __name__ == '__main__':
    searchFilesContent(r"G:\ccsSmartPipe\SmartPipe\src\java")

1.笔者使用该程序对java项目中的源文件内容进行关键字的搜索。程序入参为该项目本地文件系统路径G:\ccsSmartPipe\SmartPipe\src\java。

2.在配置文件中searchkeywords.txt中输入要搜索的任意多个关键字 
这里写图片描述

3.在配置文件中excludekeywords.txt中输入在searchkeywords. 
这里写图片描述

4.程序执行完成后,即可在result.log日志文件中,查看搜索结果。即每个关键在哪些文件中存在。并给出每个文件的具体路径。 
这里写图片描述

附件:源代码及配置文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zwl1584671413/article/details/79354173

智能推荐

Hexo博客主题安装和优化(二)_hexo matery设置雪花飘落-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏14次。一、Hexo自定义 —晚枫博客—1. 动态标题打开博客主题文件夹,路径:themes/matery/layout/layout.ejs,在对应位置添加如下代码:<script type="text/javascript"> var OriginTitile = document.title, st; document.addEventLis..._hexo matery设置雪花飘落

tomcat session管理_tomcat session管理页面-程序员宅基地

文章浏览阅读248次。最近有空看了一下tomcat 6源码里面对session管理的实现,现在写下来,以供后考,也希望能对对此感兴趣的朋友有所提示。 闲话少说,先贴一下tomcat6的component层次图(此图来自tomcat doc) Server 就是一个servlet container _tomcat session管理页面

FPGA小白的第一篇博客-程序员宅基地

文章浏览阅读410次。今天是2015年9月22日,我得记住这一天,从今天开始,笔者正式开始FPGA的板级学习,希望早日成为熟练的设计开发者_fpga小白

小经验_chmod: 无法创建符号链接-程序员宅基地

文章浏览阅读4.5k次。1.一个文件夹删不掉,是权限问题,chmod 777 xxx。类似的,根目录下的root文件夹不能访问,也是权限问题。2.serial port terminal(linux下串口终端) CompizConfig(花样)3.source insight安装,得先装wine.4.删除非空文件夹,rm -rf xxx5.arm-linux-gcc -v查看arn-_chmod: 无法创建符号链接

OC----synthesize 关键字_oc synthesize-程序员宅基地

文章浏览阅读998次。@synthesize 关键字6.1 问题: setter, getter的实现也是没有什么任何技术含量6.2 作用: 自动生成getter、setter方法的实现.6.3 语法: @synthesize @property名称; 如: @interface Person : NSObject{ int _age; } @property int age;..._oc synthesize

LWN:Fedora里的fstrim-程序员宅基地

文章浏览阅读827次。关注了就能看到更多这么棒的文章哦~Fedora and fstrimByJake EdgeDecember 31, 2019原文来自:https://lwn.net/Articles/..._fstrim 服务

随便推点

day14_Python基础内容—数据持久化、文件操作、数据持久化方法_每次运行程序输入一个学生的信息怎么回事-程序员宅基地

文章浏览阅读365次。Python学习第14天。学习内容:数据持久化、文件操作、数据持久化方法。一、数据持久化问题1:什么是数据持久化?为什么要持久化?计算机存储空间分为:运行内存和磁盘两种。程序中产生的数据默认都是保存在运行内存中,存储在运行内存中的数据在程序结束后会自动销毁。如果将数据存储到磁盘中,那么数据除非手动删除或者磁盘损坏,否则会一直存在,实现了数据的持久保存,存储在磁盘中的数据可以反复使用。磁盘存储数据的基本单位是文件。数据持久化指的就是将程序中的数据以文件的形式保存到磁盘中。为什么要持久化? _每次运行程序输入一个学生的信息怎么回事

linux安装maven-程序员宅基地

文章浏览阅读76次。1、下载maven包apache-maven-3.3.9-bin.tar.gz2、创建目录mkdir -p/usr/local/maven3、拷贝安装包到指定路径cpapache-maven-3.3.9-bin.tar.gz/usr/local/maven4、解压tar -zxvf apache-maven-3.2.5-bin.tar.gzmv apach..._linux安装maven 3.2.5

机器学习应用之WebShell检测_webshell-master-程序员宅基地

文章浏览阅读6.4k次。本文主要参考自兜哥的《Web安全之机器学习入门》前段时间在研究WebShell的检测查杀,然后看到兜哥的著作中提到的几个机器学习算法中也有实现WebShell检测的,主要有朴素贝叶斯分类、K邻近算法、图算法、循环神经网络算法等等,就一一试试看效果吧。Python中的几个机器学习的库1、numpy:安装:pip install --user numpy2、SciPy:_webshell-master

MySQL调优之索引匹配方式及索引种类_索引包含( )模式匹配的查询-程序员宅基地

文章浏览阅读1.3k次。索引匹配方式下面举例皆在索引 idx(name,age,pos)建立前提下全值匹配全值匹配指的是和索引中的所有列进行匹配匹配最左前缀只匹配前面的几列匹配列前缀可以匹配某一列的值的开头部分比如:select * from staffs where name like ‘J%’;这个语句可以利用到用name建立的索引进行查找。但是如果是 select * from staffs where name like ‘%J%’;就无法用到。匹配范围值可以查找某一个范围的数据比如:explain_索引包含( )模式匹配的查询

Unity给力插件之ShaderForge(一)-程序员宅基地

文章浏览阅读597次。这是一个用来制作shader的插件,也是一个很好的学习shader的工具。这个插件上手很容易,但是要用它来制作理想的Shader,需要下点功夫。这儿先列举出基础知识,以及我的一些实践。以后我还会继续学习并记录更多的内容。一、基本操作:    1)、截断连线:按住alt并右键   2)、框选:按住alt键并框选   3)、对于不认识的节点,右键选择what,出现API官网,可选..._shaderforge遮罩

长东应用 - 流程标题的高级定制、应用换肤与应用预览_流程标题是什么意思-程序员宅基地

文章浏览阅读122次。长东应用拟定在今年12月份发布,这是一款完全免费的高度自由定制的个人单机软件。本文主要介绍流程标题的高级定制、应用自由换肤以及应用发布前的预览功能。目录应用换肤与预览流程标题应用换肤与预览在自定义应用中,右键待发布的app,选择个性化设置。新建个性化设置,系统默认提供六种默认样式,分别为:暗夜精灵、挪威森林、铁血丹心、紫气东来、粉色回忆、酒醉探戈。也可以根据选项自由定制应用内的背景色、字体颜色,可点击上方预览按钮,查看效果。(1)预览 - 暗夜精灵效果(2_流程标题是什么意思