我在一个大硬盘上用python查找文件。我一直在看os.walk和glob。我通常使用os.walk,因为我发现它更整洁,而且似乎更快(对于通常大小的目录)。
有没有人对这两者都有经验,可以说哪个更有效?就像我说的,glob看起来比较慢,但是你可以使用通配符等,就像walk一样,你必须过滤结果。下面是查找核心转储的示例。
core = re.compile(r"core\.\d*")
for root, dirs, files in os.walk("/path/to/dir/")
for file in files:
if core.search(file):
path = os.path.join(root,file)
print "Deleting: " + path
os.remove(path)
或者
for file in iglob("/path/to/dir/core.*")
print "Deleting: " + file
os.remove(file)
您可以使用os.walk,但仍可以使用glob样式匹配。
不确定速度,但很明显,由于os.walk是递归的,所以它们会做不同的事情。
在测量/分析之前不要浪费时间进行优化。专注于使代码简单易维护。
例如,在您的代码中预编译RE,这不会提高您的速度,因为RE模块具有预编译REs的内部
re._cache
注意,几年前进行的一些优化会使代码运行速度比“未优化”代码慢。这尤其适用于基于JIT的现代语言。
我研究了1000个目录中的一小部分网页缓存。任务是计算dirs中的文件总数。输出为:
如您所见,
os.listdir
是三个中最快的。对于这个任务,glog.glob
仍然比os.walk
快。来源:
相关问题 更多 >
编程相关推荐