Python: cómo realizar una búsqueda en todo el sistema de un archivo cuando solo está disponible el nombre de archivo (no la ruta)

Todavía soy nuevo en Python (usando 2.6) y estoy tratando de hacer una búsqueda en todo el sistema para un archivo cuando solo está disponible el nombre de archivo y devolver la ruta absoluta en Windows. He buscado y encontrado algunos módulos como scriptutil.py y he revisado el módulo del sistema operativo, pero no he encontrado nada que se adapte a mis necesidades (o puede que no haya entendido todo correctamente para aplicarlo a lo que necesito, por lo que no he incluido ningún código). Apreciaría cualquier ayuda.

Gracias.

La función os.walk () es una forma de hacerlo.

import os from os.path import join lookfor = "python.exe" for root, dirs, files in os.walk('C:\\'): print "searching", root if lookfor in files: print "found: %s" % join(root, lookfor) break 

Puede comenzar en el directorio raíz y recorrer recursivamente la estructura del directorio mirando cada nivel del archivo. Por supuesto, si desea buscar en todo el sistema, deberá llamar a este para cada unidad.

 os.path.walk(rootdir,f,arg) 

Hay una buena respuesta a una pregunta similar aquí y otra aquí

Algo como esto funcionaría?

 import os import sys import magic import time import fnmatch class FileInfo(object): def __init__(self, filepath): self.depth = filepath.strip('/').count('/') self.is_file = os.path.isfile(filepath) self.is_dir = os.path.isdir(filepath) self.is_link = os.path.islink(filepath) self.size = os.path.getsize(filepath) self.meta = magic.from_file(filepath).lower() self.mime = magic.from_file(filepath, mime=True) self.filepath = filepath def match(self, exp): return fnmatch.fnmatch(self.filepath, exp) def readfile(self): if self.is_file: with open(self.filepath, 'r') as _file: return _file.read() def __str__(self): return str(self.__dict__) def get_files(root): for root, dirs, files in os.walk(root): for directory in dirs: for filename in directory: filename = os.path.join(root, filename) if os.path.isfile(filename) or os.path.isdir(filename): yield FileInfo(filename) for filename in files: filename = os.path.join(root, filename) if os.path.isfile(filename) or os.path.isdir(filename): yield FileInfo(filename) for this in get_files('/home/ricky/Code/Python'): if this.match('*.py'): print this.filepath