将目录遍历到 Python 中的特定深度
Traverse directories to a specific depth in Python
例如,我想搜索和打印 c:// 下的目录,但只列出包含 SP30070156-1 的第一层和第二层。
在没有脚本 运行 的情况下使用 python 2 通过整个子目录(在我的情况下这么多,这将花费很长时间)来获得它的最有效方法是什么? =12=]
典型的目录名称如下:
Rooty Hill SP30068539-1 3RD Split Unit AC Project
Oxford Falls SP30064418-1 Upgrade SES MSB
Queanbeyan SP30066062-1 AC
您可以尝试创建一个基于os.walk() 的函数。像这样的事情应该让你开始:
import os
def walker(base_dir, level=1, string=None):
results = []
for root, dirs, files in os.walk(base_dir):
_root = root.replace(base_dir + '\', '') #you may need to remove the "+ '\'"
if _root.count('\') < level:
if string is None:
results.append(dirs)
else:
if string in dirs:
results.append(dirs)
return results
然后你可以用string='SP30070156-1'调用它,级别1然后级别2。
不过不确定它是否会比 40 秒更快。
这里是我用的代码,方法很快就列出来了,如果按关键字过滤就更快
import os
MAX_DEPTH = 1
#folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW', 'U:\I-Project Works\PPM 20003171\PPM 11-12 QLD']
folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW']
try:
for stuff in folders:
for root, dirs, files in os.walk(stuff, topdown=True):
for dir in dirs:
if "SP30070156-1" in dir:
sp_path = root + "\"+ dir
print(sp_path)
raise Found
if root.count(os.sep) - stuff.count(os.sep) == MAX_DEPTH - 1:
del dirs[:]
except:
print "found"
例如,我想搜索和打印 c:// 下的目录,但只列出包含 SP30070156-1 的第一层和第二层。
在没有脚本 运行 的情况下使用 python 2 通过整个子目录(在我的情况下这么多,这将花费很长时间)来获得它的最有效方法是什么? =12=]
典型的目录名称如下:
Rooty Hill SP30068539-1 3RD Split Unit AC Project
Oxford Falls SP30064418-1 Upgrade SES MSB
Queanbeyan SP30066062-1 AC
您可以尝试创建一个基于os.walk() 的函数。像这样的事情应该让你开始:
import os
def walker(base_dir, level=1, string=None):
results = []
for root, dirs, files in os.walk(base_dir):
_root = root.replace(base_dir + '\', '') #you may need to remove the "+ '\'"
if _root.count('\') < level:
if string is None:
results.append(dirs)
else:
if string in dirs:
results.append(dirs)
return results
然后你可以用string='SP30070156-1'调用它,级别1然后级别2。
不过不确定它是否会比 40 秒更快。
这里是我用的代码,方法很快就列出来了,如果按关键字过滤就更快
import os
MAX_DEPTH = 1
#folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW', 'U:\I-Project Works\PPM 20003171\PPM 11-12 QLD']
folders = ['U:\I-Project Works\PPM 20003171\PPM 11-12 NSW']
try:
for stuff in folders:
for root, dirs, files in os.walk(stuff, topdown=True):
for dir in dirs:
if "SP30070156-1" in dir:
sp_path = root + "\"+ dir
print(sp_path)
raise Found
if root.count(os.sep) - stuff.count(os.sep) == MAX_DEPTH - 1:
del dirs[:]
except:
print "found"