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设置windows桌面壁纸的实现代码
Jan 28 Python
Python 正则表达式(转义问题)
Dec 15 Python
python中的字典使用分享
Jul 31 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python实现杨辉三角思路
Jul 14 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
python实现机器人行走效果
Jan 29 Python
python创造虚拟环境方法总结
Mar 04 Python
python学习开发mock接口
Apr 28 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
tensorflow图像裁剪进行数据增强操作
Jun 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
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python实现支付宝转账接口
2019/05/07 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python 字典访问的三种方法小结
2019/12/05 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
优秀求职自荐信怎样写
2013/12/18 职场文书
学校春季防火方案
2014/06/08 职场文书
公司离职证明样本
2014/09/13 职场文书
工商行政处罚决定书
2015/06/24 职场文书
致接力运动员加油稿
2015/07/21 职场文书