参考视频
# dir=directory 目录
# 递归在编程中是一种非常重要的算法
# 递归: 即方法(函数)自己调用自己的一种特殊编程写法
# 如:
# def func():
# if …:
# func()
# return …
# 函数调用自己,即称之为递归调用。
# 最典型的递归场景为找出一个文件夹中全部的文件。
# 如图,在D:/test 文件夹内,有如下嵌套结构和所属的文件, 可以通过递归编程的形式完成
"""
演示Python递归操作
需求:通过递归,找出一个指定文件夹内的全部文件
思路:写一个函数,列出文件夹内的全部内容,如果是文件就收集到list
如果是文件夹,就递归调用自己,再次判断。
"""
import os
def test_os():
"""演示os模块的3个基础方法"""
print(os.listdir("D:/Pycharm-beginner/test")) # 列出路径下的内容:['1.txt', '2.txt', '3.txt', 'a', 'b']
# print(os.path.isdir("D:/Pycharm-beginner/test/a")) # 判断指定路径是不是文件夹: True
# print(os.path.exists("D:/Pycharm-beginner/test")) # 判断指定路径是否存在: True
def get_files_recursion_from_dir(path):
"""
从指定的文件夹中使用递归的方式,获取全部的文件列表
:param path: 被判断的文件夹
:return: list,包含全部的文件,如果目录不存在或者无文件就返回一个空list
"""
print(f"当前判断的文件夹是:{path}")
file_list = []
if os.path.exists(path):
for f in os.listdir(path):
new_path = path + "/" + f
if os.path.isdir(new_path):
# 进入到这里,表明这个目录是文件夹不是文件
file_list += get_files_recursion_from_dir(new_path)
else:
file_list.append(new_path)
else:
print(f"指定的目录{path},不存在")
return []
return file_list
if __name__ == '__main__':
print(get_files_recursion_from_dir('D:/Pycharm-beginner/test'))
"""
当前判断的文件夹是:D:/Pycharm-beginner/test
当前判断的文件夹是:D:/Pycharm-beginner/test/a
当前判断的文件夹是:D:/Pycharm-beginner/test/a/d
当前判断的文件夹是:D:/Pycharm-beginner/test/a/d/e
当前判断的文件夹是:D:/Pycharm-beginner/test/b
当前判断的文件夹是:D:/Pycharm-beginner/test/b/c
['D:/Pycharm-beginner/test/1.txt', 'D:/Pycharm-beginner/test/2.txt',……]
"""
# 1. 什么是递归
# 在满足条件的情况下,函数自己调用自己的一种特殊编程技巧
# 2. 递归需要注意什么?
# 注意退出的条件,否则容易变成无限递归
# 注意返回值的传递,确保从最内层,层层传递到最外层
# 3. os模块的3个方法
# os.listdir,列出指定目录下的内容
# os.path.isdir,判断给定路径是否是文件夹,是返回True,否返回False
# os.path.exists,判断给定路径是否存在,存在返回True,否则返回False
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com