从递归更广泛的目录中搜索文件

问题描述

我想从一个目录开始搜索一个文件,比如“C:/users/test1/test2/”,如果在那里找不到该文件,那么我想扩大目录(“C: /users/test1/" 例如)等等。 当然,因为我已经在“C:/users/test1/test2/”中搜索过,所以我需要将它从搜索中排除。

os.walk() 看起来是一个执行搜索的好函数,但是,正如我提到的,我希望能够在文件树中后退并排除已经搜索过的目录。我怎么能做到这一点,或者更好的是,是否有一个功能已经实现了这一点?

解决方法

os.walk 确实接受可选参数 topdown,如果它是 True 那么

调用者可以就地修改目录名列表(可能使用 del 或 切片赋值),而 walk() 只会递归到 名称保留在 dirnames 中的子目录;这可以用来 修剪搜索,强加特定的访问顺序,甚至 通知 walk() 调用者之前创建或重命名的目录 它再次恢复 walk() 。当 topdown 为 False 时修改目录名有 对步行的行为没有影响,因为在自下而上的模式下 dirnames 中的目录是在 dirpath 本身之前生成的 生成。

因此,您应该能够使用此功能排除不需要的(已访问的目录)。