python实现搜索文本文件内容脚本


Posted in Python onJune 22, 2018

本文介绍用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中输入要搜索的任意多个关键字

python实现搜索文本文件内容脚本

3.在配置文件中excludekeywords.txt中输入在searchkeywords.

python实现搜索文本文件内容脚本

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

python实现搜索文本文件内容脚本

附件:源代码及配置文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django的分页器实例(paginator)
Dec 01 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
tensorflow更改变量的值实例
Jul 30 Python
Python中super函数用法实例分析
Mar 18 Python
numpy.random模块用法总结
May 27 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
python挖矿算力测试程序详解
Jul 03 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
python实现textrank关键词提取
Jun 22 #Python
python实现自主查询实时天气
Jun 22 #Python
python实现定时提取实时日志程序
Jun 22 #Python
pandas 读取各种格式文件的方法
Jun 22 #Python
python使用turtle库绘制时钟
Mar 25 #Python
Python日期时间对象转换为字符串的实例
Jun 22 #Python
python pandas 对时间序列文件处理的实例
Jun 22 #Python
You might like
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP中文乱码解决方案
2015/03/05 PHP
Yii快速入门经典教程
2015/12/28 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
python常量折叠基础知识点讲解
2021/02/28 Python
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
司法所长先进事迹
2014/06/02 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
离婚协议书标准格式
2014/10/04 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
美容院管理规章制度
2015/08/05 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
分析并发编程之LongAdder原理
2021/06/29 Java/Android
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏