1、程序模塊化模塊化
一個程序可能須要導入本身寫的模塊,或者須要導入、查找、修改文件等操做。當把程序移植到其餘路徑執行時,會由於模塊或文件路徑的變化而報錯。函數
程序模塊化,就是將整個程序(包含該程序須要用到的全部函數、變量、文件、模塊等)當作一個總體。只要整個程序內部的相對路徑不改變,將程序移植到其餘路徑執行,也不會報錯。spa
2、程序(實現一個功能)的基本結構3d
一、findkeys實現的功能:在日誌中查找error和exception,並將對應的文件名、行數、內容寫到日誌文件中
二、bin目錄:包含可執行程序
三、conf目錄:配置文件,配置該程序須要用到的全部數據及路徑
四、data目錄:包含該程序須要用到的全部數據
五、lib目錄:包含可執行程序須要調用的全部方法
六、log目錄:保存結果日誌文件
七、README.MD:程序說明
3、配置環境變量日誌
一、conf目錄下的setting.py,定義全局變量。將base_path加入臨時環境變量,當base_path的路徑(findkeys目錄)發生變化時,也能正確獲取到DATAPATH和LOGPATHcode
import os, sys base_path =os.path.dirname(os.path.dirname(__file__)) #base_path定位到findkeys這一層 sys.path.insert(0,base_path) #將根目錄findkeys加入環境變量 DATAPATH = os.path.join(base_path,'data') #DATAPATH獲取數據的保存路徑 LOGPATH = os.path.join(base_path,r'log/log.log') #LOGPATH獲取日誌文件路徑
二、seach.py:遍歷DATAPATH下的全部文件的每一行;當文件中存在error或exception時,記錄該文件名,行數和該行的全部內容blog
import os def search(datapath, logpath): with open(logpath,'w',encoding='utf-8')as f1: files = os.listdir(datapath)#獲取datapath下的全部文件,保存在list中 for file in files: #遍歷每個文件 filepath = os.path.join(datapath,file) #獲取文件的絕對路徑 with open(filepath, 'r') as f2: n = 1 #保存當前讀取的行數;讀取一行,n+1 for line in f2: if 'error' in line or 'exception' in line: f1.write('文件名:%s 第%d行 內容:%s' %(file, n, line)) n += 1
三、searchkeys.py:調用search.py,傳入DATAPATH和LOGPATHutf-8
import sys, os base_path = os.path.dirname(os.path.dirname(__file__)) sys.path.insert(0,base_path) #將當前文件的父目錄的父目錄findkeys加入臨時環境變量 from conf.setting import DATAPATH #導入DATAPATH from conf.setting import LOGPATH #導入LOGPATH from lib.search import search #導入search() if __name__ == '__main__': search(DATAPATH, LOGPATH)