2011-03-28 85 views
0

特定的目錄和文件在我現在的目錄中,我有以下文件: PROJECT1,project5,垃圾,臨時和個人搜索和處理在Python

我想只有這個水平通過子目錄行走。 對於除垃圾,溫度和個人的其他目錄,我想打開和處理一個特定的文件存在於他們說叫project.c

for dirs in os.walk('.').next()[1] : 
     if dirs !='junk' or dirs!='temp' or dirs != 'personal': 
     print dirs 
     print "relevant\n" 
     # file = open(project//project.c) # process relevant files 

我如何去這樣做呢?

回答

1

這裏有一種方法:

import os 
import glob 

ignoreDirs = ['junk', 'temp', 'personal'] 

for x in glob.glob('*'): 
    if (os.path.isdir(x) == False): 
     continue 

    if (x in ignoreDirs): 
     continue 

    # ... do processing work here ... 
0

而這裏的另一個有點類似的方式

ignored=set(('junk','temp','personal')) 
projectfiles=set(('project.c','Makefile.in')) 

for direntry in os.listdir('.') : 
    if not direntry in ignored : 
     filename=os.path.join(os.path.dirname('.'),direntry) 
     if os.path.isdir(filename) : 
     for projectfile in projectfiles : 
      projectfilepath=os.path.join(filename,projectfile) 
      if os.path.exists(projectfilepath) : 
      fd=open(projectfilepath) 
      # Do whatever processing is needed 
      fd.close() 
0

從Python文檔here,dirnames中可進行修改以影響跨越:

當自頂向下爲真時,呼叫者可以 修改目錄中的主目錄列表ce (可能使用del或分片 賦值),並且walk()將只有 遞歸到子目錄中,其 名稱保留在dirname中;這可以是 用於修剪搜索,施加 特定的訪問順序,或者甚至到 通知walk()關於目錄的調用者創建或重命名的 ,然後它再次恢復walk()。當topdown爲False時修改 dirnames爲 無效,因爲在自底向上模式下 dirname中的目錄爲 ,因此生成dirpath本身之前生成的目錄爲 。

所以,你可以這樣做:

def clean(dirs): 
    to_ignore = ("tmp", "junk", "personal") 
    for d in to_ignore: 
     if d in dirs: 
      dirs.remove(d) 

for dirpath, dirnames, filenames in os.walk('.'): 
    clean(dirnames) 
    # process relevant files