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实例分享:快速查找出被挂马的文件
Jun 08 Python
python服务器端收发请求的实现代码
Sep 29 Python
python文件写入实例分析
Apr 08 Python
Python中List.count()方法的使用教程
May 20 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
使用Python进行目录的对比方法
Nov 01 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Python request使用方法及问题总结
Apr 26 Python
Python安装使用Scrapy框架
Apr 12 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
投票管理程序
2006/10/09 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
PHP之header函数详解
2021/03/02 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScript XML操作 封装类
2009/07/01 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
深入研究React中setState源码
2017/11/17 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
使用python画社交网络图实例代码
2019/07/10 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
个人自荐材料
2014/05/23 职场文书
班组长安全工作职责
2014/07/15 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
干部理论学习心得体会
2016/01/21 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js