使用os.walk搜索目录位置(而不要检查同一级别的其他目录)

时间:2019-01-22 17:49:31

标签: python python-3.x os.walk

我将获取特定子目录中的所有文件名和位置(如果适合该模式)。这些子目录位于深度不同的不同位置(如前所述:how to get all the files from multiple folders with the same names)。

我的问题:尽快在目录中找到“ 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)]

1 个答案:

答案 0 :(得分:1)

您可以就地从'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的{​​{3}}:

  

topdownTrue时,呼叫者可以就地修改dirnames列表   (也许使用del或切片分配),而walk()仅会递归   进入名称保留在dirnames中的子目录中;这可以是   用于修剪搜索,强加特定的访问顺序,甚至   通知walk()有关呼叫者创建或重命名的目录的信息   在再次恢复walk()之前。