在之前我们有过这样的分享java递归实现文件夹文件的遍历输出,我们看下如何用python实现?
主要思路:
1.输入目录
2.遍历目录里面的每一项是否是文件或者文件夹
3.文件记录文件,文件夹记录文件夹,同时用递归的方式去遍历文件夹即可。
实现代码
import os
def filenum(path):
if os.path.isfile(path):
print(path)
print('file num is 1 ')
return
num=0
file_num=0
for i in (os.listdir(path)):
filepath=os.path.join(path,i)
if os.path.isfile(filepath):
num+=1
print('文件是:%s'%filepath)
else:
print('当前目录%s'%filepath)
file_num+=1
filenum(filepath)
print('当前文件数量:%s'%num,'当前文件夹数量%s'%file_num,'路径是:%s'%(path))
filenum('.')
我们看下输出的结果是什么?
这样满足了我们的需求,我们还可以看看有没有更好的输出方式呢
我们可以利用栈加深度遍历的方式去实现上述的问题
1.创建栈
2.增加路径
3.当栈不为空,处理栈的一个路径
4.遍历路径下面的每一项
5.遇到文件夹加入到栈中
6.知道栈中元素为空,退出
我们去按照上面的设想去实现代码。
import os
path = '.'
def GetAllDeep(path):
stack = []
stack.append(path)
# 处理栈,当栈为空时结束循环
while len(stack) != 0:
# 从栈里取出数据
DirPath = stack.pop()
# 目录下所有文件
num = 0
file_num = 0
FileList = os.listdir(DirPath)
# 循环处理每个文件
for FileName in FileList:
FileAbsPath = os.path.join(DirPath,FileName)
if os.path.isfile(FileAbsPath) == True:
print("是文件",FileAbsPath)
num += 1
else:
# print("是目录",FileAbsPath)
stack.append(FileAbsPath)
file_num += 1
print('当前文件数量:%s' % num, '当前文件夹数量%s' % file_num, '路径是:%s' % (FileAbsPath))
GetAllDeep(path)
以上的代码呢,可能是众多方案中的其中的几个实现,也会有其他的更好的代码。