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实现文件复制删除
Apr 19 Python
web.py 十分钟创建简易博客实现代码
Apr 22 Python
JSON Web Tokens的实现原理
Apr 02 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
python使用Matplotlib画饼图
Sep 25 Python
使用pandas读取文件的实现
Jul 31 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
centos7中安装python3.6.4的教程
Dec 11 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
python 实现两个npy档案合并
Jul 01 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 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 socket方式提交的post详解
2008/07/19 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python二分查找详解
2015/09/13 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
详解django自定义中间件处理
2018/11/21 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
Python网页解析器使用实例详解
2020/05/30 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
如何利用find命令查找文件
2015/02/07 面试题
卫生系统先进事迹
2014/05/13 职场文书
优秀班集体申报材料
2014/12/25 职场文书
员工自我工作评价
2015/03/06 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python