python - 如何在 Python 中递归遍历目录,同时忽略某些子目录?

标签 python pathlib

我的文件系统上有一个目录结构,如下所示:

folder_to_scan/
    important_file_a
    important_file_b
    important_folder_a/
        important_file_c
    important_folder_b/
        important_file_d
    useless_folder/
        ...

我想递归扫描folder_to_scan/ ,并获取所有文件名。 同时,我想忽略useless_folder/ ,以及其下的任何内容。

如果我做这样的事情:

path_to_search = Path("folder_to_scan")
[pth for pth in path_to_search.rglob("*") if pth.is_file() and 'useless_folder' not in [parent.name for parent in pth.parents]]

它会起作用(可能 - 我没有费心去尝试),但问题是,useless_folder/包含数百万个文件,并且 rglob仍然会遍历所有这些,需要很长时间,并且仅在构建最终列表时应用过滤器。

有没有办法告诉Python不要浪费时间遍历无用的文件夹(在我的例子中是useless_folder/)?

最佳答案

您可以使用递归轻松编写自己的文件迭代器。

def useless(path):
    # your logic to discard folders goes here
    ...

def my_files_iter(path):
    if path.is_file():
        yield path
    elif path.is_dir():
        if useless(path):
            return
        for child_path in path.iterdir():
            yield from my_files_iter(child_path)

关于python - 如何在 Python 中递归遍历目录,同时忽略某些子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77311583/

相关文章:

python - 如何根据列表中相同的设置值对列表列表进行排序?

python - 使用 Python pathlib 处理非 UTF-8 Posix 文件名?

python - 修补 pathlib 并在调用期间测试字符串

python - 为什么 python 脚本在 Spyder 与 cmd 提示符中的工作方式不同

python - 使用 PyYAML 编辑 docker-compose.yml

python - 如何覆盖 datetime.now() 对象

python - 如何使用 Numba 作为可选依赖项分发 Python 包

Python路径库: How to filter files from path with expression matching?

Python Pathlib路径对象未转换为字符串

python - 阅读 igraph 中的 Disconected Graph for python