¿Cómo recorrer los archivos en un directorio?

Tengo un directorio de archivos de registro. Quiero procesar cada archivo dentro de este directorio usando un script de Python.

for file in directory: # do something 

¿Cómo hago esto?

Con os.listdir() o os.walk() , dependiendo de si desea hacerlo recursivamente.

En Python 2, puedes probar 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: el tercer argumento de os.path.walk es lo que quieras. Lo obtendrás como el primer argumento de la callback.

En Python 3 os.path.walk ha sido eliminado; use os.walk en os.walk lugar. En lugar de tomar una callback, simplemente le pasa un directorio y produce (dirpath, dirnames, filenames) . Así que un equivalente aproximado de lo anterior se convierte en

 import os for dirpath, dirnames, filenames in os.walk(your_dir): print dirpath print dirnames print filenames 
 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 hacer una función de lista de reproducción para mi reproductor de audio y escaneará recursivamente todos los subdirectorios presentes en el directorio.

Podrías probar 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 sus registros están en carpetas dentro de ese directorio, será mejor que mire lo que Ignacio Vázquez-Abrams publicó.

Puede listar todos los archivos de un directorio recursivamente 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 
 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] 

Si necesita verificar varios tipos de archivos, use

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

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

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