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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python字符串处理实现单词反转
Jun 14 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
python使用webdriver爬取微信公众号
Aug 31 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
python使用knn实现特征向量分类
Dec 26 Python
python使用PyQt5的简单方法
Feb 27 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python将图片转base64,实现前端显示
Jan 09 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 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
PHP4之真OO
2006/10/09 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
node.js require() 源码解读
2015/12/13 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
医学专业毕业生个人求职信
2013/12/25 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
地球一小时倡议书
2014/04/15 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
公务员年度个人总结
2015/02/12 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python