递归遍历文件夹的python实现

所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问.
在python中有很多方法可以快速的遍历文件夹.本文的目的是想通过遍历文件夹来充分体会递归的思想和熟练使用os模块.如有纰漏希望小伙伴们批评指正.

1.需求


我在桌面上有一个"test"目录,现在我要遍历它,如果遇到文件夹,就输出"xx是文件夹",遇到文件就输出"xx是文件"

2.知识准备

2.1递归

遍历文件夹是一个简单的工作,通过for循环就可以完成,不过这里我用递归来完成它.

递归就是自己调用自己,在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归

来个小例子,比如求1加到10:

#求1+2+3+4+5+6+7+8+9+10

#用for循环的方法完成
>>> def count(num):
    result=0
	for i in range(1,num+1):
		result += i
	return result

>>> num = count(10)
>>> num
55

#求1+2+3+4+5+6+7+8+9+10

#用递归的方法完成
>>> def count(num):
        if num==1:
            return 1
        return count(num-1)+num

>>> num = count(10)
>>> num
55

从上面的这段代码可以看出,在函数count(),内部调用了自己也就是count函数

有两点要注意的

  • 给内部调用count传入的参数是num-1,在做递归的时候就是要假设当前步骤的下一步已经实现,直接拿来用就好了.在这个例子中要实现1加到10那么我就假设1加到9已经算完了,就是count(9),那么count(9)+10就好了
  • if num==1 这一步是给递归找出口,找不到出口就会一直调用下去,所以这一步也是很关键的.

2.2 os模块的一些方法

python中对文件夹的操作可以用os模块提供的一些函数,下面列出一些:

  • os.listdir(dir_path):参数是文件夹路径,作用是把改路径下的文件夹名和文件名存入一个列表

下面都是os.path下的函数

  • os.path.exists(dir_path):参数是文件夹路径,作用是判断这个文件夹是否存在,返回布尔值
  • os.path.join(dir_path,fileDirName):参数有二,第一个参数是文件夹路径,第二个参数是文件名.该函数的作用是拼凑文件的绝对路径
  • os.path.isdir(abspath):判断传入的参数是否是本机上的文件夹
  • os.path.isfile(abspath):判断传入的参数是否是文件

3.实现代码

#-*- coding:utf-8 -*-
import os

#获得一个目录下的所有的文件名和目录名(包含子目录,子文件)
def getALLDirAndFile(dir_path):
    #判断目录是否存在,不存在直接结束函数
    if not os.path.exists(dir_path):
        print "文件不存在"
        return  
    #把文件夹下的内容放入列表,便于下一步分析    
    listName =  os.listdir(dir_path)
    for fileDirName in listName:
        #拼接成绝对路径
        abspath = os.path.join(dir_path,fileDirName)
        #print(abspath)
        
        #判断该路径是否是目录,如果是目录,就用递归的方式继续遍历,不是的话就会退出
        if os.path.isdir(abspath):
            print abspath," 是目录"
            #递归遍历目录
            getALLDirAndFile(abspath)
        #判断是否是文件   
        if os.path.isfile(abspath):
            print abspath," 是文件"

if __name__ == "__main__":
    getALLDirAndFile(r'C:\Users\hong\Desktop\test')

结果

C:\Users\hong\Desktop\test\a.html  是文件
C:\Users\hong\Desktop\test\a.txt  是文件
C:\Users\hong\Desktop\test\static  是目录
C:\Users\hong\Desktop\test\templates  是目录
C:\Users\hong\Desktop\test\templates\a.html  是文件
C:\Users\hong\Desktop\test\untitled0.py  是文件
posted @ 2018-04-07 15:56  数据菜鸟  阅读(237)  评论(0)    收藏  举报