[PYTHON]使用PYTHON+正则表达式检索文件夹中所有可读文件特定内容(如代码或配置文件的IP地址、数据库用户名等)

应用场景:

系统不是自己开发的,而且不是自己熟悉的语言,本机也没有装相应的IDE,常常需要在别人的代码中找到特定的内容(如写死的IP地址,这里机关比较多,本来只该写在配置文件中,但是由于开发人员水平有限或者遇到一些祖传代码,经常在很多地方写死IP地址,导致迁移系统时经常出现无法正常使用的问题~~最近的系统迁移工作真的是要搞死人,哪儿哪儿都是写死的)。

当然还包括一些日常维护工作中遇到的问题,由于本人不懂JAVA代码,但是要帮助调试(一般是正式系统,问题还比较多),通过检索关键词找到对应SQL语句,分析SQL语句的逻辑问题。

思路:

1.使用PYTHON遍历非二进制文件,逐行读取文件,例如在一个JAVAweb项目中,读取的文件包括.JAVA/.JSP/.JS/.XML等等;

2.在读取的过程中直接跳过二进制文件,可以通过调试报错信息来跳过,二进制文件编码无法识别;

先用UTF-8编码读取,读取失败再用GBK尝试,当然可以根据自己的需求设定编码和追加编码。

3.使用正则表达式对数据进行逐行匹配,并生成列表打印到控制台;

话不多说,直接上代码:

例子是搜索出现的10.10网段的IP地址,打印到result.txt文档中。

#black_liu
#Date:2019/6/10

import os
import re

class search(object):
    def __init__(self,text):
        self.text=re.compile(text)

    def write_txt(self,txt):
        f=open(r'C:\Users\black\Desktop\result.txt','a')
        f.write(txt)

    def find(self,filepath):
        sum=0
        for x,y,z in os.walk(filepath):
            for i in z:
                filename=os.path.join(x,i)
                try:
                    f=open(filename,'r',encoding='UTF-8').readlines()
                except UnicodeDecodeError:
                    try:
                        f = open(filename, 'r', encoding='GBK').readlines()
                    except:
                        f=[]
                for j in range(len(f)):
                    r=self.text.findall(f[j])
                    if len(r)>0:
                        row_num=j+1
                        sum=sum+1
                        t='filename is {0},row num is {1};\n\ttext_list:{2};\n\ttext:{3}'.format(filename,row_num,r,f[j])
                        print(t)
                        self.write_txt(t)
        print('sum is {0}'.format(sum))



if __name__=='__main__':
    search('10\.0\.\d{1,3}\.\d{1,3}').find(r'F:\cqgzf1')

桌面应用正在写~

 

你可能感兴趣的:(PYTHON,暴力检索,正则表达式,PYTHON)