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 os模块介绍
Nov 30 Python
Python中模块string.py详解
Mar 12 Python
Python走楼梯问题解决方法示例
Jul 25 Python
python八皇后问题的解决方法
Sep 27 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
python实现MD5进行文件去重的示例代码
Jul 09 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
收音机的保养
2021/03/01 无线电
php操作xml
2013/10/27 PHP
php魔术变量用法实例详解
2014/11/13 PHP
PHP中overload与override的区别
2017/02/13 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Javascript 二维数组
2009/11/26 Javascript
jquery中动态效果小结
2010/12/16 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
JS实现长图上下滚动效果
2020/03/19 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
Python之reload流程实例代码解析
2018/01/29 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
python 并发下载器实现方法示例
2019/11/22 Python
python logging 日志的级别调整方式
2020/02/21 Python
python中实现词云图的示例
2020/12/19 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
护士自我鉴定范文
2013/10/06 职场文书
开学季活动策划方案
2014/02/28 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2015年项目工作总结
2015/04/29 职场文书
送给客户微信问候语!
2019/07/04 职场文书