如何在Python中使用pathlib`glob`对大型目录结构高效地执行并行文件搜索?

问题描述 投票:0回答:1

我正在开发一个 Python 项目,我需要在一个非常大的目录结构中搜索特定文件。目前,我正在使用 pathlib 模块中的 glob (或 rglob)方法,但由于文件和目录数量庞大,它的速度相当慢。

这是我当前代码的简化版本:

from pathlib import Path

base_dir = Path("/path/to/large/directory")
files = list(base_dir.rglob("ind_stat.zpkl"))

这可行,但速度太慢,因为它必须遍历大量目录和文件。理想情况下,我想将目录遍历工作划分为多个线程或进程以提高性能。是否有优化或替代库/方法可以帮助提高性能?

python parallel-processing glob pathlib
1个回答
0
投票

如何执行此操作取决于您对目录结构的了解。例如,如果base_dir的第一层有很多目录,那么您可以运行独立的线程来导航这些目录。

当然,如果您的目录嵌套很深,这可能没有多大帮助(如果有的话):

from pathlib import Path
from threading import Thread

FILENAME = "ind_stat.zpkl"
BASE_DIR = Path("/path/to/large/directory")

locations: list[Path] = []

def process(d: Path):
    for f in d.rglob(FILENAME):
        locations.append(f)

def main():
    threads: list[Thread] = []
    for f in BASE_DIR.glob("*"):
        if f.name == "FILENAME":
            locations.append(f)
        elif f.is_dir():
            threads.append(Thread(target=process, args=(f,)))
            threads[-1].start()
    for t in threads:
        t.join()


if __name__ == "__main__":
    main()
    print(locations)
© www.soinside.com 2019 - 2024. All rights reserved.