使用Generator和Recursion遍歷目錄

在遍歷或搜索文件系統(tǒng)時,如果目錄的文件很多,目錄結(jié)果復(fù)雜,可能會消耗較多的內(nèi)存來保存已遍歷的信息,所以使用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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評論 25 709
  • 在此處先列下本篇文章的主要內(nèi)容 簡介 next方法的參數(shù) for...of循環(huán) Generator.prototy...
    醉生夢死閱讀 1,486評論 3 8
  • 簡介 基本概念 Generator函數(shù)是ES6提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。本章詳細(xì)介紹...
    呼呼哥閱讀 1,134評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 梭羅總是那么喜愛自然。在梭羅的《遠(yuǎn)行》里,有這么一段文字是關(guān)于蘋果的命名的,我覺得很有意思。 1836年,倫敦園藝...
    梨子不青閱讀 1,330評論 0 1

友情鏈接更多精彩內(nèi)容