1. 程式人生 > >通過os.walk進行目錄遞迴,讀取檔案並找到檔案中指定內容

通過os.walk進行目錄遞迴,讀取檔案並找到檔案中指定內容

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 = []
    for 
root, 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: pass
return 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)