我需要检查目录及其所有子目录中是否存在文件。
由于这项检查反过来必须在程序执行期间执行很多次,所以我想找到一种快速的方法。
我知道如何使用os.walk(),但我相信它每次都会遍历所有子树。既然我想将它用作存在测试,那么一旦找到我正在寻找的文件,就有办法从os.walk中拯救出来?
答案 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
如果文件系统不是静态的,你可以产生另一个计算新版本地图的线程,而主线程使用地图回答问题。
在所有问题之后"这个文件是否存在?"是近似的,其实际意义是"当我要求检查时,是否列出了此文件?"因为在消极或积极的发现后,事情可能会立即改变(甚至在答案到达来电者之前)。很可能有人询问文件是否存在,获得位置的肯定答案,但在尝试打开文件时会收到错误,因为它不再存在。
使用特定于操作系统的扩展也可能只需安装一个观察者"将通知每个文件创建/删除,从而允许保持地图更新,而不必连续重新扫描整个树。