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实现简单的socket server实例
Apr 29 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
深入浅析python 协程与go协程的区别
May 09 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
python3下pygame如何实现显示中文
Jan 11 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
python中pyplot基础图标函数整理
Nov 10 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
用python开发一款操作MySQL的小工具
May 12 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
PHP源代码数组统计count分析
2011/08/02 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
PHP实现的简单缓存类
2015/07/29 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
jquery easyui使用心得
2014/07/07 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
python散点图实例之随机漫步
2018/08/27 Python
Python异常处理例题整理
2019/07/07 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
python 基于opencv实现图像增强
2020/12/23 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
岗位职责范本
2013/11/23 职场文书
学校采购员岗位职责
2014/01/02 职场文书
运动会开幕式解说词
2014/02/05 职场文书
停车场管理协议书范本
2014/10/08 职场文书
2014年创卫工作总结
2014/11/24 职场文书
生产设备维护保养制度
2015/08/06 职场文书
python删除csv文件的行列
2021/04/06 Python
图文详解nginx日志切割的实现
2022/01/18 Servers
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL