python - 如何使用生成器遍历文件系统?

标签 python recursion iterator generator yield

我正在尝试创建一个实用程序类来遍历目录中的所有文件,包括子目录和子子目录中的文件。我尝试使用发电机,因为发电机很酷;但是,我遇到了障碍。


def grab_files(directory):
    for name in os.listdir(directory):
        full_path = os.path.join(directory, name)
        if os.path.isdir(full_path):
            yield grab_files(full_path)
        elif os.path.isfile(full_path):
            yield full_path
        else:
            print('Unidentified name %s. It could be a symbolic link' % full_path)

当生成器到达一个目录时,它只是简单地生成新生成器的内存位置;它没有给我目录的内容。

如何让生成器产生目录的内容而不是新的生成器?

如果已经有一个简单的库函数可以递归地列出目录结构中的所有文件,请告诉我。我不打算复制库函数。

最佳答案

既然可以使用 os.walk,为什么还要重新发明轮子?

import os
for root, dirs, files in os.walk(path):
    for name in files:
        print os.path.join(root, name)

os.walk 是一个生成器,它通过自顶向下或自底向上遍历目录树来生成目录树中的文件名

关于python - 如何使用生成器遍历文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698596/

相关文章:

python - SQLAlchemy orm 样式,如何对连接字符串进行特殊驱动

python - 从文件中读取行时继续使用值,直到列表中的下一个键 - python

原始类型的 Java 迭代器

java - 迭代器可以从列表中删除不等于特定值的项目吗?

python - Word2vec + Tensorflow 和一切的形状

python - 在 Python 中模拟 ImportError

python - 将 `functools.lru_cache` 应用于 lambda

Javascript 递归函数。将数据存储在数组中时出现错误结果

postgresql - Postgres PL/pgSQL递归计算

python - 将自定义用户身份验证添加到 django-rest-framework-simple-jwt