首页 > 代码库 > python里两种遍历目录的方法

python里两种遍历目录的方法

os.walk

函数声明:os.walk(top,topdown=True,onerror=None)

(1)参数top表示需要遍历的顶级目录的路径。

(2)参数topdown的默认值是“True”表示首先返回顶级目录下的文件,然后再遍历子目录中的文件。当topdown的值为"False"时,表示先遍历子目录中的文件,然后再返回顶级目录下的文件。

(3)参数onerror默认值为"None",表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。

返回值:函数返回一个元组,含有三个元素。这三个元素分别是:每次遍历的路径名、路径下子目录列表、目录下文件列表。

请看例子:

import os.pathdef walk(arg):    for root,dirs,files in os.walk(arg):             for file in files:                print os.path.join(root,file)def main():    path =c:\\Users\\jim_wan\\Desktop    walk(path)if __name__ == __main__:    main()

 

os.path.walk

函数声明:os.path.walk(top,func,arg)

(1)参数top表示需要遍历的目录路径

(2)参数func表示回调函数,即对遍历路径进行处理的函数。所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数 处理某个任务。注意:walk的回调函数必须提供三个参数:第1个参数为os.path.walk的参数arg,第2个参数表示目录dirname,第3 个参数表示文件列表names。注意:os.path.walk的回调函数中的文件列表不和os.walk()那样将子目录和文件分开,而是混为了一摊, 需要在回调函数中判断是文件还是子目录。

(3)参数arg是传递给回调函数的元组,为回调函数提供处理参数,arg可以为空。回调函数的第1个参数就是用来接收这个传入的元组的。

 请看例子:

import os.pathdef Vist(arg,dirname,names):    for filepath in names:        print os.path.join(dirname,filepath)def main():    path =c:\\Users\\jim_wan\\Desktop    os.path.walk(path,Vist,())if __name__ == __main__:    main()

 

可以看到实现同样的功能,os.walk和os.path.walk代码量基本差不多。唯一区别是os.walk比较简单直接,容易理解;而os.path.walk用了回调函数,稍微难理解点。所以用哪个还是要视个人情况而定。