Búsqueda Recursiva con Python

Este es un pequeño script que hice para realizar una busqueda de archivos de forma recursiva, A pedido de un compañero Cool , Espero les sirva.


import os

def search(path,file_name): try: files = os.listdir(path) trunk = 0 except OSError: print “Access Denied: “ + path trunk = 1

if trunk 0: for f in files: bool = os.path.isdir(path + f) if bool True: search(path + f + ‘/’,file_name) else: if file_name == f: print ‘Found : ‘ + path + f

if name == ‘main’: path = raw_input(“Directorio de búsqueda: “) file = raw_input(“Archivo a buscar: “) search(path,file)

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de magmax

Eso mismo hice yo.

Y lo llamé pygrep.

El caso es que le metí alguna cosa que otra más... Así como gtk.

PD: Brue, ya le he metido el gráfico y estás entre los agradecimientos Eye-wink

Miguel Ángel García
http://magmax.org

Imagen de david.villa

¿Y qué tal...

...usando la librería estándar? Más corto, sencillo y eficiente, y además ya está hecho Smiling

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os

path = raw_input("Directorio de búsqueda: ")
fname = raw_input("Archivo a buscar: ")

for root, dirs, files in os.walk(path):
    if fname in files:
        print "Found:", os.path.join(root, fname)

Una curiosidad. Eso que haces de definir una variable "bool" (que por cierto es una palabra reservada) para luego hacer una comprobación lógica y además comparando con "True"... ¿qué lógica tiene? valga la redundancia. Lo veo muchísimo y nunca lo he entendido. ¿No es mejor y más simple?:

   ...
   if os.path.isdir(path + f):
      search(path + f + '/',file_name)
   else:
      ...

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

De acuerdo

Claro David, estoy totalmente de acuerdo contigo, lo que tu dices sobre la libreria si lo conocia, pero si tu te fijas cuando digo "A pedido de un compañero", me refiero a que el esta empezando recien con el lenguaje y me pidio que lo hiciera de la manera mas simple posible y él luego iba ha ir evaluando el codigo y mejorarlo, cosa que tu has realizado y me parece muy bien.
con respecto a la palabra "bool", no se de donde saque eso Puzzled , pero buena tu aclaracion.
Gracias.

Imagen de david.villa

ok, entonces...

def search(path, fname):
    try:
        for i in os.listdir(path):
            full_name = os.path.join(path, i)
            if os.path.isdir(full_name):
                search(full_name, fname)
            elif i == fname:
                print "Found:", full_name
    except OSError, e:
        print e

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.