lunes, 5 de agosto de 2013

Búsqueda de directorios en forma recursiva con python

Comentaban en una entrada de un comando como tree para Windows,el cual existe que es lstree.exe desde la cmd de Windows,pero también pensé en programar uno similar usando algún lenguaje de programación,como C o C++ para hacer tree para Windows pero como ya esta lstree.exe no es necesario asi que solo me quede con la idea del algoritmo,de como seria y es muy sencillo,una búsqueda recursiva de archivos y directorios,claro que tree tiene argumentos como ordenar alfabéticamente,solo directorios,mostrar bytes,etc pero luego del algoritmo principal se saca lo demás,así que para una búsqueda recursiva basta usar una función recursiva.

Y que tiene que ver python?

Pues python o ruby son muy sencillos y los uso para hacer prototipos,como un tipo de pseudocodigo que pueda ejecutar,ya que python es mucho mas sencillo que C,C++,C#,Java y bueno:

 #!/usr/bin/env python
 from glob import glob  
 from os import path  
 """  
 Algoritmo:  
   
 1.-Recorrer directorio y selecionar los directorios y archivos.  
   
 2.-Recorrer cada directorio y hacer lo mismo que el paso 1  
   
 """  
   
 def dirs(x,n):  # funcion principal
     di = glob(x+"/"+"*")  # vemos todo lo que esta adentro del directorio que nos manden
     tabs = "  "*n  # Algo de vista
     do = x.split('/')  # Esto es para mostrar el archivo(por culpa de glob)
     print tabs+do[-1]+" /"  # Mostramos la vista
     for i in di:  # Recorremos el directorio
         if path.isdir(i):  # Si es direcotorio
             dirs(i,n+1)  # Empezamos la función recursiva
         elif path.isfile(i):  # Si es archivo
             do = i.split('/')  # gracias a glob :/
             print "|"+tabs+do[-1]  # Lo mostramos
   
   
 if __name__ == "__main__":  # Asi se ejecutan los scripts
     dirs(".",0)  # Iniciamos el script buscando en el directorio actual
   

Veamos.

Creamos algunos archivos y carpetas:



tree :


El script en python:


Como ven le falta mucha vista,pero eso ya se hace teniendo el script principal,lo unico que queria mostrar era la busqueda recursiva usando una funcion recursiva.

Espero que les sirva :D.

Un extra para los Linuxeros/Unixeros:

 find . -print | sed 's;[^/]*/;->|   ;g'


Eso es todo :D.




No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.