我最近问了这个问题,并得到了一个涉及os.walk
命令的精彩答案。我的脚本使用它在整个驱动器中搜索特定文件夹,使用for root, dirs, files in os.walk(drive):
. 不幸的是,在 600 GB 的驱动器上,这大约需要 10 分钟。
有没有更好的方法来调用这个或更有效的命令?谢谢!
我最近问了这个问题,并得到了一个涉及os.walk
命令的精彩答案。我的脚本使用它在整个驱动器中搜索特定文件夹,使用for root, dirs, files in os.walk(drive):
. 不幸的是,在 600 GB 的驱动器上,这大约需要 10 分钟。
有没有更好的方法来调用这个或更有效的命令?谢谢!
如果您只是在寻找一个小的持续改进,那么有一些方法可以比os.walk
大多数平台做得更好。
特别是,walk
最终不得不使用stat
许多常规文件来确保它们不是目录,即使信息是(Windows)或可能(大多数 *nix 系统)已经可以从较低级别的 API 获得。不幸的是,这些信息在 Python 级别不可用……但您可以ctypes
通过构建 C 扩展库或使用第三方模块(如scandir
.
这可能会将您的时间从 10% 减少到 90%,具体取决于您的平台和目录布局的详细信息。但它仍然是一个线性搜索,必须检查系统上的每个目录。比这更好的唯一方法是访问某种索引。您的平台可能有这样的索引(例如,Windows 桌面搜索或 Spotlight);您的文件系统也可以(但这需要低级调用,并且可能需要 root/admin 访问权限),或者您可以自己构建一个。
使用subprocess.Popen启动本机“查找”进程。
scandir.walk(path)
给出的结果比os.walk(path)
. 你可以在这里使用这个模块pip install scandir
是scandir的文档