栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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
平时工作中有能够使用脚本实现的工作,我都会尽量制作,当作学习和熟练使用脚本~
加油!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号