Python代码在一个文件夹中搜索另一个文件夹
我刚接触Python,想要在一个叫做“test”的文件夹里找一个名字像“vvl*cpp”的子文件夹。不过问题是,我不知道“test”文件夹的深度有多深。
我试过:
dir_name=glob.glob('./[a-z,_]*/test/vvl*cpp')
file_dict={}
for i in dir_name:
name=re.compile(r"\.\/[a-z,_]*\/test\/vvl_")
file_name=name.sub("",i)
file_dict[file_name]=i
for key in sorted(file_dict.iterkeys()):
print "%s: %s" % (key, file_dict[key])
但这个方法只会在子文件夹里搜索。正如我说的,我对“test”文件夹的深度一无所知,它可能只有1层,也可能有10层。请给我一些建议。我现在用的是Python 2.6。
4 个回答
0
我会这样做——用 os.walk
来遍历整个文件夹树,然后用一个 lambda
来检查你的条件,最后用列表推导式把符合条件的结果收集起来:
cond = lambda x, y: os.path.basename(x) == 'test' and
y.startswith('vvl') and y.endswith('cpp')
matches = (os.path.join(r, d) for r, d, f in os.walk(tree) if cond(r, d))
希望这就是你想要的,不过有点不太清楚。
0
你可以使用 os.walk() 这个方法。
import os
folders = []
for path, dirs, files in os.walk(starting_path):
folders.append(path)
print path
0
我喜欢这段代码里的逻辑:
for myDir, myDirs, myFilenames in os.walk(myPath):
print type(myDir), myDir
print type(myDirs), myDirs
print type(myFilenames), myFilenames
你可以用一些方法来处理路径,比如:os.path.abspath()、os.path.dirname()等等。
1
这件事其实很简单,只要你明白需要两个部分:
- 一个函数,用来递归地遍历一个文件夹。
- 一个函数,用来检查一个文件夹是否符合某个条件。
对于第一个部分:
def walk_tree(path):
for root, dirs, files in os.walk(path):
for dir in dirs:
yield root, dir
对于第二个部分:
def is_a_match(dirparent, dirname):
return os.path.basename(dirparent) == "test" and \
dirname.startswith("vvl") and dirname.endswith("cpp")
现在把这两部分结合起来:
def iter_targets(path):
for dirparent, dirname in walk_tree(path):
if is_a_match(dirparent, dirname):
yield os.path.join(dirparent, dirname)