递归选定的子目录级别
Recurse through selected level of subdirectories
我是 python 的新手。我有以下代码,通过将选定的目录检索到我的列表中,效果很好。但是因为有很多子目录和文件,与我升级它的 Perl 代码相比,代码相当慢。
using re
using os
foundarr = []
allpaths = ["X:\Storage", "Y:\Storage"]
for path in allpaths:
for root, dirs, files in os.walk(path):
for dir in dirs:
if re.match("[DILMPY]\d{8}", dir):
foundarr.append(os.path.join(root, dir))
break
我的问题: 有没有一种方法可以使用 os.walk
仅递归选定的目录级别?或者以某种方式修剪我不想递归的那些?我在 for
循环中添加了 break
假设它会在找到我选择的目录并继续前进后中断,但我认为这没有帮助,因为它仍然必须经过数千个子目录和文件。
在 Perl 代码中,一个简单的 $File::Find::prune = 1 if /[DILMPY]\d{8}$/;
可以防止编译器递归访问其余的子目录和文件。
如果使用 glob 固定深度是个好主意。根据 this SO post 您可以使用 glob 设置遍历深度。
import glob
import os.path
depth2 = glob.glob('*/*')
depth2 = filter(lambda f: os.path.isdir(f), depth2)
这将列出所有深度为 2 的子目录。
我是 python 的新手。我有以下代码,通过将选定的目录检索到我的列表中,效果很好。但是因为有很多子目录和文件,与我升级它的 Perl 代码相比,代码相当慢。
using re
using os
foundarr = []
allpaths = ["X:\Storage", "Y:\Storage"]
for path in allpaths:
for root, dirs, files in os.walk(path):
for dir in dirs:
if re.match("[DILMPY]\d{8}", dir):
foundarr.append(os.path.join(root, dir))
break
我的问题: 有没有一种方法可以使用 os.walk
仅递归选定的目录级别?或者以某种方式修剪我不想递归的那些?我在 for
循环中添加了 break
假设它会在找到我选择的目录并继续前进后中断,但我认为这没有帮助,因为它仍然必须经过数千个子目录和文件。
在 Perl 代码中,一个简单的 $File::Find::prune = 1 if /[DILMPY]\d{8}$/;
可以防止编译器递归访问其余的子目录和文件。
如果使用 glob 固定深度是个好主意。根据 this SO post 您可以使用 glob 设置遍历深度。
import glob
import os.path
depth2 = glob.glob('*/*')
depth2 = filter(lambda f: os.path.isdir(f), depth2)
这将列出所有深度为 2 的子目录。