递归
递归在编程中是一种非常重要的算法
递归:即方法(函数)自己调用自己的一种特殊编程方法
如:def func():
if .... :
func()
return ...
函数自己调用自己,即称之为递归调用
递归找文件
最典型的递归场景为找出一个文件夹中全部的文件
import os
def test_os():
print(os.listdir("./bak")) # 列出路径下的内容
print(os.path.isdir("./bak/PySpark")) # 判断指定路径是不是文件夹
print(os.path.exists("./bak/PySpark")) # 判断指定路径是否存在
def get_files_recursion_from_dir(path):
"""
从指定的文件夹中使用递归的方式,获取全部的文件列表
:param path: 被判断的文件夹
:return: list, 包含全部的文件,如果目录不存在或者无文件就返回一个空list
"""
file_list = []
print(f"当前判断的文件夹是{path}")
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__':
test_os()
print(get_files_recursion_from_dir("./bak"))
['1960-2019全球GDP数据.csv', 'GDP.html', 'hello.txt', 'orders.txt', 'PySpark', 'Python 常用命令备忘.txt', 'requirements.txt', 'search_log.txt', 'test.txt', '全国疫情地图.html', '全球GDP前八国家时间线柱状图.html', '基础时间线柱状图.html', '基础柱状图.html', '折线图数据', '数据分析案例', '河南省疫情地图.html', '测试地图.html', '疫情.txt', '疫情确症折线图.html']
True
True
当前判断的文件夹是./bak
当前判断的文件夹是./bak/PySpark
当前判断的文件夹是./bak/折线图数据
当前判断的文件夹是./bak/数据分析案例
当前判断的文件夹是./bak/数据分析案例/__pycache__
['./bak/1960-2019全球GDP数据.csv', './bak/GDP.html', './bak/hello.txt', './bak/orders.txt', './bak/PySpark/distinct.py', './bak/PySpark/filter.py', './bak/PySpark/flatMap.py', './bak/PySpark/hello.py', './bak/PySpark/map.py', './bak/PySpark/reduceByKey.py', './bak/PySpark/wordcount.py', './bak/PySpark/综合案例.py', './bak/Python 常用命令备忘.txt', './bak/requirements.txt', './bak/search_log.txt', './bak/test.txt', './bak/全国疫情地图.html', './bak/全球GDP前八国家时间线柱状图.html', './bak/基础时间线柱状图.html', './bak/基础柱状图.html', './bak/折线图数据/印度.txt', './bak/折线图数据/日本.txt', './bak/折线图数据/美国.txt', './bak/数据分析案例/2011年1月销售数据.txt', './bak/数据分析案例/2011年2月销售数据JSON.txt', './bak/数据分析案例/class_define.py', './bak/数据分析案例/file_define.py', './bak/数据分析案例/main.py', './bak/数据分析案例/new.txt', './bak/数据分析案例/__pycache__/class_define.cpython-312.pyc', './bak/数据分析案例/__pycache__/file_define.cpython-312.pyc', './bak/数据分析案例/每日销售额柱状图.html', './bak/河南省疫情地图.html', './bak/测试地图.html', './bak/疫情.txt', './bak/疫情确症折线图.html']