简介

  • 递归在编程中是一种非常重要的算法
  • 递归:即方法(函数)自己调用自己的一种特殊编程写法
  • 最典型的递归场景为找出一个文件夹中全部的文件

注意

  • 退出的条件,否则容易变成无限递归
  • 返回值的传递,确保从最内层,层层传递到最外层

递归示意图

代码

import os
def get_files_recursion_from_dir(path)->list:
    """获取指定路径下的全部文件列表

    包含全部文件,如果目录不存在就返回空列表

    Args:
        path (str): 被获取的路径
    """
    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:
        return []
    return file_list
if __name__ == '__main__':
    print(get_files_recursion_from_dir("D:/draw.io"))

输出

正在搜索文件:D:/draw.io
正在搜索文件:D:/draw.io/locales
正在搜索文件:D:/draw.io/resources
['D:/draw.io/chrome_100_percent.pak', 'D:/draw.io/chrome_200_percent.pak', 'D:/draw.io/d3dcompiler_47.dll', 'D:/draw.io/draw.io.exe', 'D:/draw.io/ffmpeg.dll', 'D:/draw.io/icudtl.dat', 'D:/draw.io/libEGL.dll', 'D:/draw.io/libGLESv2.dll', 'D:/draw.io/LICENSE.electron.txt', 'D:/draw.io/LICENSES.chromium.html', 'D:/draw.io/locales/af.pak', 'D:/draw.io/locales/am.pak', 'D:/draw.io/locales/ar.pak', 'D:/draw.io/locales/bg.pak', 'D:/draw.io/locales/bn.pak', 
'D:/draw.io/locales/ca.pak', 'D:/draw.io/locales/cs.pak', 'D:/draw.io/locales/da.pak', 'D:/draw.io/locales/de.pak', 'D:/draw.io/locales/el.pak', 'D:/draw.io/locales/en-GB.pak', 'D:/draw.io/locales/en-US.pak', 'D:/draw.io/locales/es-419.pak', 'D:/draw.io/locales/es.pak', 'D:/draw.io/locales/et.pak', 'D:/draw.io/locales/fa.pak', 'D:/draw.io/locales/fi.pak', 'D:/draw.io/locales/fil.pak', 'D:/draw.io/locales/fr.pak', 'D:/draw.io/locales/gu.pak', 'D:/draw.io/locales/he.pak', 'D:/draw.io/locales/hi.pak', 'D:/draw.io/locales/hr.pak', 'D:/draw.io/locales/hu.pak', 'D:/draw.io/locales/id.pak', 'D:/draw.io/locales/it.pak', 'D:/draw.io/locales/ja.pak', 'D:/draw.io/locales/kn.pak', 'D:/draw.io/locales/ko.pak', 'D:/draw.io/locales/lt.pak', 'D:/draw.io/locales/lv.pak', 'D:/draw.io/locales/ml.pak', 'D:/draw.io/locales/mr.pak', 'D:/draw.io/locales/ms.pak', 'D:/draw.io/locales/nb.pak', 'D:/draw.io/locales/nl.pak', 'D:/draw.io/locales/pl.pak', 'D:/draw.io/locales/pt-BR.pak', 'D:/draw.io/locales/pt-PT.pak', 'D:/draw.io/locales/ro.pak', 'D:/draw.io/locales/ru.pak', 'D:/draw.io/locales/sk.pak', 'D:/draw.io/locales/sl.pak', 'D:/draw.io/locales/sr.pak', 'D:/draw.io/locales/sv.pak', 'D:/draw.io/locales/sw.pak', 'D:/draw.io/locales/ta.pak', 'D:/draw.io/locales/te.pak', 'D:/draw.io/locales/th.pak', 'D:/draw.io/locales/tr.pak', 'D:/draw.io/locales/uk.pak', 'D:/draw.io/locales/ur.pak', 'D:/draw.io/locales/vi.pak', 'D:/draw.io/locales/zh-CN.pak', 'D:/draw.io/locales/zh-TW.pak', 'D:/draw.io/resources/app-update.yml', 'D:/draw.io/resources/app.asar', 'D:/draw.io/resources/elevate.exe', 'D:/draw.io/resources.pak', 'D:/draw.io/snapshot_blob.bin', 'D:/draw.io/Uninstall draw.io.exe', 'D:/draw.io/v8_context_snapshot.bin', 'D:/draw.io/vk_swiftshader.dll', 'D:/draw.io/vk_swiftshader_icd.json', 'D:/draw.io/vulkan-1.dll']
最后修改:2025 年 01 月 20 日
如果觉得我的文章对你有用,请随意赞赏