使用Python快速搜索驱动器

时间:2013-08-08 20:54:56

标签: python python-2.7

我最近问了this question并得到了一个涉及os.walk命令的精彩答案。我的脚本使用它来使用for root, dirs, files in os.walk(drive):在整个驱动器中搜索特定文件夹。不幸的是,在600 GB的驱动器上,这需要大约10分钟。

是否有更好的方法来调用此命令或使用更高效的命令?谢谢!

3 个答案:

答案 0 :(得分:3)

如果您只是寻求一个小的持续改进,那么在大多数平台上都有比os.walk更好的方法。

特别是,walk最终必须stat许多常规文件,以确保它们不是目录,即使信息是(Windows)或可能(大多数* nix系统)已经可以从较低级别的API获得。遗憾的是,这些信息在Python级别不可用...但您可以通过ctypes或通过构建C扩展库或使用第三方模块(如scandir)来获取该信息。

这可能会将您的时间缩短到10%到90%,具体取决于您的平台和目录布局的详细信息。但它仍然是一个线性搜索,必须检查系统上的每个目录。唯一能做得更好的方法是访问某种索引。您的平台可能有这样的索引(例如,Windows桌面搜索或Spotlight);您的文件系统也可以(但这需要低级别的调用,可能需要root / admin访问权限),或者您可以自己构建一个。

答案 1 :(得分:1)

使用subprocess.Popen启动原生“查找”流程。

答案 2 :(得分:0)

scandir.walk(path)的结果比os.walk(path)快2-20倍。 你可以使用这个模块pip install scandir 这是scandir

的文档