如何更快地遍历大量文件夹

时间:2019-09-03 14:12:48

标签: python

我必须遍历给定路径(My_Path)(大约60 000)上的大量文件夹。 然后,在My_Path中的每个文件夹中,我必须检查文件名是否包含特定日期。 我想知道是否有比使用os库一个一个地循环更快的方法。 (大约1小时)

My_Path:
-   Folder 1
              o File 1
              o File 2
              o File 3
              o …
-   Folder 2
-   Folder 3
-   …
-   Folder 60 000
import os
My_Path = r'\\...\...\...\...'
mylist2 = os.listdir(path)  # give a list of 60000 element
for folder in mylist2:
    mylist = os.listdir(My_Path + folder)  # give the list of all files in each folder
    for file in mylist:
        Check_Function(file)

实际运行大约需要一个小时,我想知道是否有最佳解决方案。

谢谢!!

2 个答案:

答案 0 :(得分:1)

尝试os.walk(),可能会更快:

import os
My_Path = r'\\...\...\...\...'
for path, dirs, files in os.walk(My_Path): 
    for file in files:
        Check_Function(os.path.join(path, file))

如果不是,那可能是您的Check_Function吃光了周期。

答案 1 :(得分:1)

正如其他人已经建议的那样,您可以像此answer一样获得所有文件的列表lst。然后,您可以通过多处理来旋转函数。

import multiprocessing as mp


def parallelize(fun, vec, cores):
    with mp.Pool(cores) as p:
        res = p.map(fun, vec)
    return res

然后运行

res = parallelize(Check_Function, lst, mp.cpu_count()-1)

更新 鉴于我认为Check_Function不受CPU限制,您可以使用更多的内核。