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