Python 3`os.walk`比简单的`find -type d`慢

时间:2013-09-02 18:53:17

标签: python-3.x os.walk

我需要在某些文件夹中找到所有git存储库。以前,我使用find . -type -d -name .git。现在我在Python 3中重写了这个并使用os.walk。遍历树的过程似乎比简单的find要长一些。

如何加快速度?

以下是完整的代码:old new

2 个答案:

答案 0 :(得分:4)

SO上有许多关于os.walk()的帖子,它已经慢了。

  • 您可能对scandir感兴趣(不知道它是否仍然适用于python3)
  • 不是走遍整个树并过滤“.git”,而是成为一个好人,并使用glob-module直接找到它们。

答案 1 :(得分:1)

如果您的意思是find_repos()的实施,那么使用os.walk()可能不是最佳选择。原因是,一旦找到.git子目录,就不需要进行更深入的搜索。尝试编写自己的目录遍历。您可以查看os.pywalk如何实现的来源 - 慢度的原因可能是用Python编写的。

对于新解决方案的其他部分......我注意到你没有编译正则表达式,但我没有检查细节。

我建议将功能与另一个Python脚本分开,然后使用timeit模块测量解决方案,然后尝试优化。