2012-11-05 94 views
0

我想返回一个文件的路径,如果它是由程序找到的,但我希望它继续循环(或递归重复)该程序,直到所有文件都被检查。返回文本文件路径

def findAll(fname, path): 
for item in os.listdir(path): 
    n = os.path.join(path, item) 
    try: 
     findAll(n, fname) 
    except: 
     if item == fname: 
      print(os.idontknow(item)) 

所以我在与调用路径麻烦,现在我有

os.idontknow(item) 

作为占位符

输入是:

findAll('fileA.txt', 'testpath') 

输出是:

['testpat\\fileA.txt', 'testpath\\folder1\\folder11\\fileA.txt','testpath\\folder2\\fileA.txt'] 
+2

你看过'os.walk'吗?它走过一个目录结构,它应该能够处理这种情况。 – RocketDonkey

回答

2

每上面我的意见,在这里,将开始在当前目录下,并通过所有子目录进行搜索,寻找匹配的文件fname一个例子:

import os 

# path is your starting point - everything under it will be searched 
path = os.getcwd()  
fname = 'file1.txt' 
my_files = [] 

# Start iterating, and anytime we see a file that matches fname, 
# add to our list  
for root, dirs, files in os.walk(path): 
    for name in files: 
    if name == fname: 
     # root here is the path to the file 
     my_files.append(os.path.join(root, name)) 

print my_files 

或者作为一个函数(更适合你的情况:)):

import os 

def findAll(fname, start_dir=os.getcwd()): 
    my_files = [] 
    for root, dirs, files in os.walk(start_dir): 
    for name in files: 
     if name == fname: 
     my_files.append(os.path.join(root, name)) 
    return my_files 


print findAll('file1.txt') 
print findAll('file1.txt', '/some/other/starting/directory') 
0

这样的事情,也许?

import os 
path = "path/to/your/dir" 
for (path, dirs, files) in os.walk(path): 
    print files 
+0

但我只是从基本文件和我想要查找的文本文件开始。不是整个路径。我想返回整个路径。 –