2013-12-16 41 views
0

我试图跟踪数据库中引用的大量文件,这些文件可能已传输或可能尚不存在。快速检查以查看python中是否存在大量文件

我发现通过慢速网络循环检查一千个文件是否存在使用isfile是否存在很慢。

os.path.isfile(filepath) 

使用files=os.listdir(path)来获取文件列表会更快吗?然后与我的数据库进行比较?有没有另外一种方法呢?

回答

3

使用files = os.listdir(path)来获取文件列表会更快吗?

这取决于。

如果您正在寻找30个目录中的3000个文件中的1000个文件,那么列出30个目录的速度几乎要快于任何文件系统。

如果您在1000个目录中寻找100000个文件中的1000个文件,那么列出1000个目录显然比仅统计1000个文件要慢。

作为粗略指南,在OS X或Linux等典型的* nix系统上,列出一个目录大约需要几十个文件名作为统一单个文件。但是,在某些网络文件系统中,延迟比带宽问题要严重得多,在这种情况下,该比率可能会上升。

对于您的实际使用情况,如果不明显,哪个会更快,请尝试它们两个(也许是更小的子集)并进行比较。最后一件事 - 如果你想长时间“追踪”,而你目前正在周期性地重新检查它们,那么可能有办法避免这种情况。根据您的平台和共享协议,您可能能够在文件或目录上设置文件系统监视,并检测何时发生更改。

相关问题