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)

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
magmax's picture

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

david.villa's picture

¿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.

david.villa's picture

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.