我必须遍历给定路径(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)
实际运行大约需要一个小时,我想知道是否有最佳解决方案。
谢谢!!
答案 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限制,您可以使用更多的内核。