python递归菜鸟_递归遍历文件夹的python实现

本文通过一个实际需求介绍如何使用Python递归遍历文件夹,详细阐述了递归思想和os模块的使用,包括os.listdir()、os.path.exists()、os.path.join()等方法,并给出了完整实现代码,帮助理解递归遍历文件系统的基本操作。
摘要由CSDN通过智能技术生成

所谓遍历(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 是文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值