我使用os.walk
和fnmatch
使用过滤器来搜索电脑硬盘上的所有图像文件。 这工作完全正常,但非常缓慢,因为它需要大约9分钟的时间查找+ -70000图像。
优化的代码运行速度更快的任何想法? 任何其他的建议?
我使用的Python 2.7.2的方式。
import fnmatch
import os
images = ['*.jpg', '*.jpeg', '*.png', '*.tif', '*.tiff']
matches = []
for root, dirnames, filenames in os.walk("C:\\"):
for extension in images:
for filename in fnmatch.filter(filenames, extension):
matches.append(os.path.join(root, filename))
我不是那种正则表达式疯子谁总是诉诸于一个re
锤子解决所有的问题,但其实这跑过去两次在我的测试,你的fnmatch版本一样快凌晨一点:
import os
import re
matches = []
img_re = re.compile(r'.+\.(jpg|png|jpeg|tif|tiff)$', re.IGNORECASE)
for root, dirnames, filenames in os.walk(r"C:\windows"):
matches.extend(os.path.join(root, name) for name in filenames if img_re.match(name))
Python的看起来非常确定我。
你可以尝试用
for root, dirnames, filenames in os.walk("C:\\"):
for extension in extensions:
matches.extend(os.path.join(root, filename) for filename
in fnmatch.filter(filenames, extension))
如果不有所作为(我想这不会),我相信你的硬盘已经成为在这个过程中的瓶颈(记住,磁盘==慢,你遍历并列出系统中的每个目录中的文件) 。
如果硬盘是瓶颈,从多个结果dir /s ...
语句应该肯定不会一掷千金比Python的解决方案快。
import os
extns = ('.jpg', '.jpeg', '.png', '.tif', '.tiff')
matches = []
for root, dirnames, fns in os.walk("C:\\"):
matches.extend(
os.path.join(root, fn) for fn in fns if fn.lower().endswith(extns)
)