首页 > 解决方案 > 使用 os.walk 搜索目录位置(而不是检查同一级别的其他目录)

问题描述

我将获取特定子目录中的所有文件名和位置(如果符合模式)。这些子目录位于不同深度的不同位置(如前所述:如何从多个同名文件夹中获取所有文件)。

我的问题:尽快我在目录中找到'xyz',我不想检查'xyz'是否是同一级别上任何其他目录的子目录(例如,我不想检查' D:/qwer/lkj' 可能包含'xyz'。

D:/qwer/xyz
D:/qwerty/qwertyui/xyz
D:/qwerty/zxc/zxc1/zxcv12/zx/xyz

编码:

for dirpath, dirnames, filenames in os.walk(path_to_main_search = 'D:\\'):
    if 'xyz' in dirpath:
      filenames = [fn for fn in filenames if fnmatch.fnmatch(fn, pattern)]

标签: pythonpython-3.xos.walk

解决方案


'xyz'您可以删除除原地以外的所有目录名称dirnames,以便它们不会被遍历:

for dirpath, dirnames, filenames in os.walk(path_to_main_search):
    if 'xyz' in dirnames:
        dirnames[:] = ['xyz']
    if os.path.basename(dirpath) == 'xyz':
        # process filenames

摘自os.walk文档

topdownis时,调用者可以就地True修改列表(可能使用或切片赋值),并且只会递归到名称保留在的子目录中;这可以用来修剪搜索,强制执行特定的访问顺序,甚至可以在调用者再次恢复之前通知调用者创建或重命名的目录。dirnamesdelwalk()dirnameswalk()walk()


推荐阅读