我的文件系统上有一个目录结构,如下所示:
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/