我正在尝试跟踪数据库中引用的大量文件,这些文件可能已传输或尚不存在。
我发现通过缓慢的网络循环检查数千个文件以查看文件是否存在使用isfile
非常慢。
os.path.isfile(filepath)
files=os.listdir(path)
使用获取文件列表会更快吗?然后与我的数据库进行比较?还有另一种方法吗?
使用 files=os.listdir(path) 来获取文件列表会更快吗?
这取决于。
如果您要在 30 个目录中查找 3000 个文件中的 1000 个文件,那么对于几乎任何文件系统,列出 30 个目录都会更快。
如果您要在 1000 个目录中查找 100000 个文件中的 1000 个文件,那么列出 1000 个目录显然比仅统计 1000 个文件要慢。
作为粗略的指导,在典型的 *nix 系统(如 OS X 或 Linux)上,列出一个目录所需的时间大约与统计单个文件一样长。但是,在某些网络文件系统上,您的延迟可能比带宽问题更糟糕,在这种情况下,这个比率可能会上升很多。
对于您的实际用例,如果不明显哪个更快,请同时尝试它们(可能是较小的子集)并进行比较。
最后一件事——如果你试图在很长一段时间内“跟踪”,并且你目前正在定期重新检查它们,那么可能有一种方法可以避免这种情况。根据您的平台和共享协议,您可能能够在文件或目录上设置文件系统监视,并检测何时发生更改。