2011-02-07 31 views

Respuesta

6

Puede intentar algo como:

import os.path 
def print_it(x, dir_name, files): 
    print dir_name 
    print files 

os.path.walk(your_dir, print_it, 0) 

Nota: la tercera argumento de os.path.walk es lo que quiera. Usted obtendrá como la primera arg de la devolución de llamada

+0

Aunque esto va a funcionar debido a la forma en '' os' maneja path', que debería * * Siempre importación 'os.path' explícitamente. –

+0

arreglado Gracias por este comentario. – luc

+1

@Ignacio Vazquez-Abrams: 'os' es un módulo (no un paquete). 'import os' funciona en Python 2.4-3.2, jython, pypy. ¿Por qué necesita 'importar os.path'? – jfs

2

Usted podría intentar glob:

import glob 

for file in glob.glob('log-*-*.txt'): 
    # Etc. 

Pero glob no funciona de forma recursiva (por lo que yo sé), por lo que si los registros están en carpetas dentro de ese directorio, sería mejor que miraras Ignacio Vazquez-Abrams publicado.

3
import os 
# location of directory you want to scan 
loc = '/home/sahil/Documents' 
# global dictonary element used to store all results 
global k1 
k1 = {} 

# scan function recursively scans through all the diretories in loc and return a dictonary 
def scan(element,loc): 

    le = len(element) 

    for i in range(le): 
     try: 

      second_list = os.listdir(loc+'/'+element[i]) 
      temp = loc+'/'+element[i] 
      print "....." 
      print "Directory %s " %(temp) 
      print " " 
      print second_list 
      k1[temp] = second_list 
      scan(second_list,temp) 

     except OSError: 
      pass 

    return k1 # return the dictonary element  


# initial steps 
try: 
    initial_list = os.listdir(loc) 
    print initial_list 
except OSError: 
    print "error" 


k =scan(initial_list,loc) 
print " ..................................................................................." 
print k 

Hice este código como un escáner de directorio para realizar una función de lista de reproducción para mi reproductor de audio y de forma recursiva buscará todos los subdirectorios en el directorio actual.

+0

FYI: sangría 4 espacios para el código o usa el botón '{}' - vea http://stackoverflow.com/editing-help para más información – McDowell

1

Si necesita comprobar si hay múltiples tipos de archivos, utiliza

glob.glob("*.jpg") + glob.glob("*.png") 

Glob no se preocupa por el orden de los archivos de la lista. Si necesita archivos ordenados por nombre de archivo, use

sorted(glob.glob("*.jpg")) 
2

Puede enumerar todos los archivos de un directorio de forma recursiva como este.

from os import listdir 
from os.path import isfile, join, isdir 

def getAllFilesRecursive(root): 
    files = [ join(root,f) for f in listdir(root) if isfile(join(root,f))] 
    dirs = [ d for d in listdir(root) if isdir(join(root,d))] 
    for d in dirs: 
     files_in_d = getAllFilesRecursive(join(root,d)) 
     if files_in_d: 
      for f in files_in_d: 
       files.append(join(root,f)) 
    return files 
2
import os 
rootDir = '.' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    print('Found directory: %s' % dirName) 
    for fname in fileList: 
     print('\t%s' % fname) 
    # Remove the first entry in the list of sub-directories 
    # if there are any sub-directories present 
    if len(subdirList) > 0: 
     del subdirList[0] 

Cuestiones relacionadas