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 相关文章推荐
十个Python程序员易犯的错误
Dec 15 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
学生信息管理系统python版
Oct 17 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
如何基于windows实现python定时爬虫
May 01 Python
深入了解NumPy 高级索引
Jul 24 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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的pcntl多进程用法实例
2015/03/19 PHP
也说JavaScript中String类的replace函数
2011/09/22 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
高中军训感想800字
2014/02/23 职场文书
文秘大学生求职信
2014/02/25 职场文书
环保建议书400字
2014/05/14 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
借条格式范本
2015/05/25 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
早安问候语大全
2015/11/10 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技