前言

最近手头的一个小需求,正好在学习Python就使用Python脚本来制作,如下~
我的脚本都是我经过测试可用的,如有问题,欢迎各位大佬提出,小白一定积极改进,感谢

需求

1.获得一个tar包,放到指定路径解压
2.对解压后的文件夹进行遍历,找出.cpp文件
3.在.cpp文件中,查找是否存在指定关键词

完成以上3点后,可以根据需求不同更改脚本,如寻找不同的文件、增删关键词、对存在关键词的文件进行后续操作。

脚本

import os
import sys
import tarfile
import shutildef filelist_Sizer(path,sizer1,sizer2,keyword):dirlist = []filelist = []for dirpath, dirnames, filenames in os.walk(path):for name in filenames:dirlist.append(os.path.join(dirpath,name))for file in dirlist:if file.endswith(key2):with open(file,'r',encoding='utf-8') as fr:for key in keyword:if key in fr.read():filelist.append(file)return filelistdef uncompress(dstpath,filepath):filename=os.path.basename(filepath)dstpath = dstpath + '/' + filenameshutil.copyfile(filepath,dstpath)os.chdir(os.path.dirname(dstpath))tar=tarfile.open(filename,'r')tar.extractall()tar.close()key1='.cpp'
#key2='.c'
key2='.sh'
keyword=[]
keyword.append('if')
keyword.append('and')#filepath = sys.argv[1] # 也可以进行传参的方式,这里指定路径进行测试
filepath = '/scratch/ywang/learn/python/tarfile/test.tar.gz'
dstpath = '/tools/workspace'
uncompress(dstpath,filepath)filelist=filelist_Sizer(dstpath,key1,key2,keyword)
print(filelist)if len(filelist) == 0:finishflag = Trueos.popen(f'rm -rf {dstpath}/*')
else:finishflag = Falseprint('There are %s files containing keywords, please check the following path: %s !!' %(len(filelist),dstpath))

分析

filelist_Sizer 函数:筛选文件格式,并对符合条件的文件,寻找关键词
uncompress 函数:解压该文件,并将文件复制到工作路径进行后续操作

对序列keyword进行增删即可操作关键词

finishflag 为后续操作铺垫,比如我打算后续结合jenkins,寻出关键词的则以失败退出本次任务

后续

我已经接入Jenkins
可将脚本最后的一部分内容更改为

if len(filelist) == 0:finishflag = Trueos.popen(f'rm -rf {dstpath}/*')print('The traversal check has passed')sys.exit(0)
else:finishflag = Falseprint('There are %s files containing keywords, please check the following path: %s !!' %(len(filelist),dstpath))print(filelist)sys.exit(1)


如图所示,即可在jenkins中也是shell中调用该脚本,并为当存在关键字时,jenkins以失败退出,否则继续下面的Build操作。


这个方法,我个人是不推荐Leader的,早前就建议过,我感觉遍历查关键字实在浪费时间,不过leader执意要求,就当作学习了,正好在学习python,就用了python来实现,而没有使用shell
平时工作中有能够使用脚本实现的工作,我都会尽量制作,当作学习和熟练使用脚本~
加油!

使用Python遍历文件夹下文件寻找关键词相关推荐

  1. python观察日志(part18)--遍历文件夹下文件并判断后缀

    学习笔记,仅供参考 import ospath = r"F:\MyStudio\PythonStudio\goatbishop.project01\MyNewWork" fileN ...

  2. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容

    public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...

  3. 实时监测文件夹且根据条件自动删除指定文件夹下文件

    一.需求说明 当我们的项目开发完成部署到生产环境使用后,为了便于后续的运维工作(对问题及时排查和解决)在项目中编写了一些关于对异常情况或者实时数据自动生成对应的日志文件等内容,但是随着时间的流逝,这些 ...

  4. bat批处理修改文件夹下文件名字

    bat批处理修改文件夹下文件名字 业务场景 有时候我们经常会遇到需要批量处理一些文本或者文件名称的问题,批量文本的处理可以使用notepad++ 里面的列编辑,或者批量替换字符串即可.假如有这样一个要 ...

  5. Linux统计某文件夹下文件、文件夹的个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  6. Linux下查看文件夹下文件个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  7. Centos 统计文件夹下文件和文件夹的个数

    运营管理中经常会碰到关于文件统计的需求,近期在做系统迁移,正好做个备忘. 关键词: d  : directory -   : 一般文件 以下命令在需要统计的目录下进行,如: # cd 目标文件夹 统计 ...

  8. linux: 批量修改文件夹及文件夹下文件的名字

    假如我有一个文件夹,文件夹下面有一些文件,如下所示: Gideon/gideon_lisha/Gideon_samuel/Gideon_nathan.xml Gideon/lisha_gideon/G ...

  9. linux根目录数量限制,windows,linux文件夹下文件上限最大个数

    1.FAT16文件系统, 可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte): 卷的最大体积是4GB:每个卷上最多可以保存的文件数量是65,536个 ( ...

  10. Git无法添加文件夹下文件

    git rm --cached directorygit add directory 参考 git 无法添加文件夹下文件

最新文章

  1. CV领域论文常用单词汇总
  2. HDLBits 系列(0)专题目录
  3. TikTok信息流广告怎么做才有效果?我从100个营销短视频中总结了这些方法
  4. IOS开发数据库篇—SQLite模糊查询
  5. ie php文件,IE(HTTPS):从php文件生成pdf不起作用
  6. 蓝桥杯 2017 国赛B组C/C++【对局匹配】
  7. 关于游戏行业目前的形势
  8. K8S精华问答 | 如何监控部署在Docker容器上的应用程序?
  9. 螺旋千斤顶设计大作业_如何正确使用汽车千斤顶,新手司机看过来,老司机教你正确用法...
  10. 扒一扒贝索斯的接班人,为何选他挑起大梁?
  11. SketchUp的二次开发探索 (三)制作一个完整的插件
  12. 纬衡多个用户荣获“第五届建筑创作奖”
  13. idea报错500——问题分析解决1
  14. BC1.2 PD协议
  15. IM即时通讯聊天软件1.0
  16. html是什么1003无标题,爱特漫画1003无标题
  17. C++Web服务器(一):服务器整体运行流程
  18. 数据挖掘计算机语言,数据挖掘工程师
  19. Android 友盟统计 友盟推送 友盟分享快速集成
  20. mysql mysqldataadapter_MySql中MySqlDataAdapter类的用法

热门文章

  1. 在知乎上看到的一个关于Linux运维工程师必知的几点,希望对有志于从事运维工作的你有帮助
  2. PHPstudy的下载与安装。
  3. 订阅号微信公众号历史文章爬虫php,2019.9月最新爬取微信公众号历史文章的办法...
  4. 中小学计算机教学大纲,中小学信息技术教材教法教学大纲.doc
  5. 左手拿叉右手拿刀——话西餐
  6. YAPI简单使用教程
  7. 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked
  8. CAD制图初学入门:CAD机械软件中如何构造孔?
  9. 径向基函数模型matlab,径向基函数RBF.ppt
  10. 无线路由器经常掉线断网的可能的原因