поиск и обработка определенного каталога и файлов в Python - PullRequest
0 голосов
/ 28 марта 2011

В моем текущем каталоге у меня есть следующие файлы: project1, project5, junk, temp и personal

Я хотел бы пройтись по подкаталогам только на этом уровне.Для каталогов, отличных от 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 ]

1 голос
/ 28 марта 2011

Вот один из способов:

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 голосов
/ 29 марта 2011

Из документации питона здесь , имена каталогов могут быть изменены, чтобы повлиять на обход:

Когда topdown равен True, вызывающий может изменить список имен каталогов на месте (возможно,с использованием del или sliceэто может быть использовано для сокращения поиска, наложения определенного порядка посещения или даже для информирования walk () о каталогах, которые вызывающий абонент создает или переименовывает, прежде чем он возобновит walk () снова.Изменение псевдонимов, когда topdown имеет значение False, неэффективно, поскольку в режиме снизу вверх каталоги в 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
0 голосов
/ 28 марта 2011

А вот еще один, несколько похожий способ

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...