文件存在测试:python中的快速子树搜索

时间:2014-07-14 15:04:39

标签: python os.walk

我需要检查目录及其所有子目录中是否存在文件。

由于这项检查反过来必须在程序执行期间执行很多次,所以我想找到一种快速的方法。

我知道如何使用os.walk(),但我相信它每次都会遍历所有子树。既然我想将它用作存在测试,那么一旦找到我正在寻找的文件,就有办法从os.walk中拯救出来?

2 个答案:

答案 0 :(得分:2)

如何使用break statement

例如:

for p, ds, fs in os.walk(directory):
    if 'wanted' in fs:
        print('found in %s' % p)
        break

答案 1 :(得分:0)

你可以简单地break离开循环。

如果文件系统是静态的或几乎是静态的,那么可能是更好的选择是提前构建字典

filename -> list of paths where it is

如果文件系统不是静态的,你可以产生另一个计算新版本地图的线程,而主线程使用地图回答问题。

在所有问题之后"这个文件是否存在?"是近似的,其实际意义是"当我要求检查时,是否列出了此文件?"因为在消极或积极的发现后,事情可能会立即改变(甚至在答案到达来电者之前)。很可能有人询问文件是否存在,获得位置的肯定答案,但在尝试打开文件时会收到错误,因为它不再存在。

使用特定于操作系统的扩展也可能只需安装一个观察者"将通知每个文件创建/删除,从而允许保持地图更新,而不必连续重新扫描整个树。