使用Python来进行文件遍历匹配

开端

就在前不久,我和我的小伙伴使用Virus Toatal帮助一位师兄爬了一些数据(大概1200个左右),在爬完了以后,师兄给出了新的任务。

任务说明

任务很简单,所有的report文件都已经被分了类,每一个report的路径是这样的。

在GENOME下的所有子文件夹的名称,都各自代表一类经典的apk病毒名称,而这次的任务就是统计每一个report中出现了子文件名称的数量,比如说在BaseBridge文件夹下的一个report里,就要统计这个report中BaseBridge出现的数量。

经过观察,有大小写不同的也要统计进来,师兄说最后的输出格式是这样的。

第69行就是在每一个report末端插入的内容,21是统计的数量,62是检测点,这个数据固定出现在每一个报告中的倒数第三行中截取的。

任务逻辑

对于一个Python新手玩家来说,我第一步做的是把逻辑写一遍,一开始写的是这样的。

这是个初始逻辑,是一个二层循环结构,基本上可以完成任务,不过,本着代码还可以复用的思想,需要把功能独立一下。
所以应该分成三个小模块:

这三个小模块就分别对应了一层循环,二层循环以及逻辑中的第5步,然后就是去实现这几个问题了。

实现

前两步是百度就能解决的,当然第三步也是,源码在此,Python的来检测大小写这个问题其实很简单,直接使用正则表达式的lower()函数,(或者upper()也可以),使得待检测字符和样本都转换为小写(或者大写)即可。

检测部分代码如下:

def scanReport(file,filename):
    #filename = filename[-47:-7]
    if(filename[-3:]!="txt")#不读取后缀为txt的文件
        tempdir = rootdir+"/"+file+"/"+filename
        f = open(tempdir,"r")
        lines = f.readlines()
        #line = f.readline()
        #print(line)
        num = 0 
        n = len(lines)
        #print(n)
        total = ''
        for line in lines:
            templine = line.lower()
            #print (line)
            if(templine.count(file.lower())):
                num+=1
            if (n==3):
                #print(line)
                total = line[20:22]
                #print(total)
            n-=1
        scan = file+": "+str(num)+"/"+total
        f.close()
        f = open(tempdir,"a+")
        f.write("\n"+scan)
        f.close()

End

一个很简单的任务,可以让新手玩家知道Python处理文本的一个基本过程,代码还是可以优化的,只是我为了能稳定完成任务,就写成了这样。希望可以给新手一点帮助。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注