【发布时间】:2012-02-14 09:50:13
【问题描述】:
我在一个大硬盘上用 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)
【问题讨论】:
-
对我来说听起来像是过早的优化。我浏览了源代码(hg.python.org/cpython/file/d01208ba482f/Lib/glob.py 和 hg.python.org/cpython/file/d01208ba482f/Lib/os.py),发现这两个函数都依赖于
os.listdir和os.isdir,所以我的直觉告诉我,你不会以任何方式获得太多收益。 (但是,正如下面两个答案中所指出的,os.walk会在子目录上递归,而glob.iglob不会,因此比较没有意义)。如果您确实遇到了性能问题,请介绍几种方法。否则,只需编写清晰的代码即可。
标签: python traversal glob os.walk directory-walk