在python中搜索和处理特定的目录和文件

时间:2011-03-28 18:26:33

标签: python file

在我目前的目录中,我有以下文件: project1,project5,junk,temp和personal

我想只在这个级别浏览子目录。 对于除垃圾,临时和个人以外的目录,我想打开并处理其中存在的特定文件,称为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 

我该怎么做?

3 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分: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()

答案 2 :(得分:0)

从python文档here,可以修改dirnames以影响遍历:

  

当topdown为True时,来电者可以   就地修改dirnames列表   (也许使用del或slice   赋值)和walk()只会   递归到其子目录中   姓名保留在名字中;这可以   用来修剪搜索,强加一个   具体的访问顺序,甚至是   告诉walk()有关目录的信息   调用者在它之前创建或重命名   再次继续行走()。修改   topdown为False时的dirnames是   无效,因为在自下而上的模式   dirnames中的目录是   在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