程序员

使用Generator和Recursion遍历目录

2016-08-09  本文已影响27人  PythonDeveloper

在遍历或搜索文件系统时,如果目录的文件很多,目录结果复杂,可能会消耗较多的内存来保存已遍历的信息,所以使用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
上一篇下一篇

猜你喜欢

热点阅读