2013-09-26 78 views
0

我有一个包含多个子目录的目录,每个子目录也包含多个目录。我有一个存在于所有子目录中的文件,需要根据子目录选择文件。我可以输入一些内容。根据目录筛选文件

like <cell 1> <cell 2> <cell 3> 
each cell1 
    <job 1> <job 2> < job 3> 
each job contain sample. txt 

相似的cell2和cell 3.所以我想从每个cell/job1目录中提取sample.txt。 并编写下面的程序。 只是在修复问题后修改程序。我们可以做更多更好的办法

#!/usr/bin/py 
import os 
def find_all(name, path): 
    result = [] 
    for root, dir, files in os.walk(path): 
     print "root %s dir %s" %(root, dir) 
     if "job1" in root: 
      print "\n" 
      if name in files: 
       result.append(os.path.join(root, name)) 
    return result 
name = "sample.txt" 
path = "." 
data = find_all(name, path) 
print data 

+0

进口操作系统;来自glob进口glob;对于glob中的f(“./cell */job */sample.txt”):if os.path.dirname(f).endswith(“job1”):whatever() – jlujan

回答

1

产生的元组(由os.walk)的第二个元素是目录列表,而不是一个目录名。

而你应该检查root而不是dirs

尝试以下操作:

def find_all(name, path): 
    result = [] 
    for root, dirs, files in os.walk(path): 
     if os.path.basename(root) == 'job1': 
      if name in files: 
       result.append(os.path.join(root, name)) 
    return result 

使用glob.glob一种替代方案:

import glob 
import os 

data = glob.glob(os.path.join('cell*', 'job1', 'sample.txt')) 
+0

它将返回所有文件,但我正在寻找为特定文件夹中的文件 – user765443

+0

@AbhishekGoswami,我更新了代码。 – falsetru