2011-03-28 55 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