[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')

桌面應用正在寫~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章