我将获取特定子目录中的所有文件名和位置(如果适合该模式)。这些子目录位于深度不同的不同位置(如前所述: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)]
答案 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}}:
当
topdown
为True
时,呼叫者可以就地修改dirnames
列表 (也许使用del
或切片分配),而walk()
仅会递归 进入名称保留在dirnames
中的子目录中;这可以是 用于修剪搜索,强加特定的访问顺序,甚至 通知walk()
有关呼叫者创建或重命名的目录的信息 在再次恢复walk()
之前。