通過os.walk進行目錄遞迴,讀取檔案並找到檔案中指定內容
阿新 • • 發佈:2019-01-09
Mark:
通過os.walk進行整個檔案目錄的遞迴遍歷,那麼walk的語法如下:walk()方法語法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
引數:
top -- 是你所要遍歷的目錄的地址, 返回的是一個三元組(root,dirs,files)。
- root 所指的是當前正在遍歷的這個資料夾的本身的地址
- dirs 是一個 list ,內容是該資料夾中所有的目錄的名字(不包括子目錄)
- files 同樣是 list , 內容是該資料夾中所有的檔案(不包括子目錄)
topdown --可選,為 True,則優先遍歷 top 目錄,否則優先遍歷 top 的子目錄(預設為開啟)。如果 topdown 引數為 True,walk 會遍歷top資料夾,與top 資料夾中每一個子目錄。
onerror -- 可選, 需要一個 callable 物件,當 walk 需要異常時,會呼叫。
followlinks -- 可選, 如果為 True,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(預設關閉)。
注:該方法是沒有返回值
當前使用os.walk程式碼遍歷整個目錄,並讀取檔案,找出檔案內容的關鍵字,並寫到指定檔案中
# -*- coding: utf-8 -*- import os #遍歷檔案,查詢字尾名為.m或者.h的檔案,其它檔案忽略不做檢查 def findAllFiles(path): find_files = [] forroot, dirs, files in os.walk(path): for file in files: pathWithFile = os.path.join(root,file) #root當前檔案路徑本身+ file(查詢到的檔名稱)組成絕對路徑 if os.path.splitext(pathWithFile)[1] in [".m",".h"]:#指定查詢以.m和.h的檔案 find_files.append(pathWithFile) else: passreturn find_files # read file def readfile (readfilepath): keywords = ["#","//","/*","*","/**","*/"] #搜尋檔案關鍵詞 with open(readfilepath,'r',encoding='utf-8') as f: #使用with open方法開啟檔案,使用encoding引數主要解決檔案內容為中文的問題 newStr =[] for lines in f: for i in range(len(keywords)): if keywords[i] in lines: newStr.append(lines) return newStr def writeContent(writefilepath): getFilePath = findAllFiles("D:/test/mmm/") with open(writefilepath,'a',encoding='utf-8') as wf : for i in range(len(getFilePath)): getContent = readfile(getFilePath[i]) for j in range(len(getContent)): gc = getContent[j] wf.write(gc) wf.close() if __name__ == '__main__': testPath = "D:/test/Content.txt" writeContent(testPath)