1

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

有没有更好的方法来调用这个或更有效的命令?谢谢!

4

3 回答 3

3

如果您只是在寻找一个小的持续改进,那么有一些方法可以比os.walk大多数平台做得更好。

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

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

于 2013-08-08T21:06:25.533 回答
1

使用subprocess.Popen启动本机“查找”进程。

于 2013-08-08T21:04:48.110 回答
0

scandir.walk(path)给出的结果比os.walk(path). 你可以在这里使用这个模块pip install scandirscandir的文档

于 2016-05-12T10:03:47.013 回答