2013-09-26 119 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