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

前言

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

需求

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

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

脚本

import os
import sys
import tarfile
import shutil

def 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 filelist

def uncompress(dstpath,filepath):
    filename=os.path.basename(filepath)
    dstpath = dstpath + '/' + filename
    shutil.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 = True
    os.popen(f'rm -rf {dstpath}/*')
else:
    finishflag = False
    print('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 = True
    os.popen(f'rm -rf {dstpath}/*')
    print('The traversal check has passed')
    sys.exit(0)
else:
    finishflag = False
    print('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
平时工作中有能够使用脚本实现的工作,我都会尽量制作,当作学习和熟练使用脚本~
加油!

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值