通过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)


你可能感兴趣的:(Python)