美文网首页程序员
使用Generator和Recursion遍历目录

使用Generator和Recursion遍历目录

作者: PythonDeveloper | 来源:发表于2016-08-09 13:02 被阅读27次

在遍历或搜索文件系统时,如果目录的文件很多,目录结果复杂,可能会消耗较多的内存来保存已遍历的信息,所以使用Generator就是一个比较好的选择。另外,使用Recursion会降低代码量,使代码可读性更强。

遍历目录,返回所有的文件和目录

def scan_dir_gen(dir_path):
    """Scan directory recursively and yield all files and directories.

    Args:
        dir_path: Path object to be scanned.
    """
    if dir_path is None or not isinstance(dir_path, Path):
        raise TypeError('dir_path must be a Path object')

    # The current directory.
    yield dir_path
    for path in dir_path.iterdir():
        if path.is_dir():
            # Recursively tranverse the directory.
            yield from scan_dir_gen(path)
        else:
            yield path

遍历目录,只返回只有文件的目录

def dir_only_has_files_gen(dir_path):
    """Scan the directory recursively and returns directories which contain only files.

    Args:
        dir_path: Path object to be scanned.
    """
    if dir_path is None or not isinstance(dir_path, Path):
        raise TypeError('dir_path must be a Path object')

    has_dir = False
    for path in dir_path.iterdir():
        if path.is_dir():
            has_dir = True
            yield from dir_only_has_files_gen(path)
    if not has_dir:
        yield dir_path

相关文章

  • 使用Generator和Recursion遍历目录

    在遍历或搜索文件系统时,如果目录的文件很多,目录结果复杂,可能会消耗较多的内存来保存已遍历的信息,所以使用Gene...

  • Generator(生成器)和async await

    1、generator generator是ES6实现的标准。generator 函数返回一个遍历器对象遍历器对象...

  • ES6(十四)—— Generator

    目录 Generator是做什么的 ES6如何让遍历“停”下来 Basic Syntax —— 基础语法 Seni...

  • Generator

    Generator返回一个遍历器对象,返回的遍历器对象可以依次遍历Generator函数内部的每一个状态。 Gen...

  • Generator

    Generator generator函数执行后不执行函数体,返回遍历器对象,调用遍历器对象next()执行函数体...

  • 深度优先 广度优先

    深度优先:首先遍历最低层的节点,然后逐步上移到根节点。dfs + recursion过于的慢尽量不使用递归例 Bi...

  • async await 的实现原理

    generator + yield + promise 利用generator遍历器生成器函数的分段执行 ,只有在...

  • ES6学习笔记(18)之 Generator 函数的语法

    参考:ECMAScript 6 入门 Generator 函数概览 调用 Generator 函数,返回一个遍历器...

  • node文件目录操作之遍历删除目录

    从node目录删除学习深度优先遍历和广度优先遍历处理任务思想。使用到的模块:fs path 使用到的方法:(均为同...

  • Generator

    Generator 概念: Generator 函数返回的遍历器对象 基本用法 // 定义生成器函数 ...

网友评论

    本文标题:使用Generator和Recursion遍历目录

    本文链接:https://www.haomeiwen.com/subject/ahcdsttx.html