【问题标题】:Search file from recursively broader directories从递归更广泛的目录中搜索文件
【发布时间】:2021-05-18 09:07:02
【问题描述】:

我想从一个目录开始搜索一个文件,比如说“C:/users/test1/test2/”,如果在那里找不到该文件,那么我想让目录更宽(“C: /users/test1/" 例如)等等。 当然,既然我已经在“C:/users/test1/test2/”中搜索过了,我需要将其排除在搜索之外。

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

【问题讨论】:

    标签: python python-os file-search


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢@Daweo,知道这很有用。唯一的问题是,使用 walk 我无法从可能保存我的文件的目录开始搜索。 IE。我想从“C:/users/test1/test2/”开始搜索,因为该文件可能保存在那里,但如果结果不在那里,我将从 os.walk() 收到一个空的 3 元组.而不是这种行为,我想退回到“C:/users/test1/”并排除以前搜索过的目录。如果我错了,请纠正我
    • @mbrivio os.walk 永远不会给出完全空的元组,因为至少第一个元素 (dirpath) 不会为空
    • 这比从“C:/users/test1/”开始搜索要好,因为在“C:/users/test1/”中可能有其他文件夹,其中不可能找到文件并且我不想在其中进行不必要的搜索。
    • 是的,但如果文件不存在,我不需要它来返回目录路径。
    • @mbrivio 请注意,您可能会更改目录名以强制执行特定的访问顺序
    猜你喜欢
    • 2012-04-07
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多