grep_lite.py en Python
Un grep mínimo: hallar líneas que coinciden con un patrón en varios archivos.
"""Un grep mínimo: busca un patrón y muestra las líneas que coinciden."""
import sys
from pathlib import Path
def buscar_en_archivo(ruta, aguja):
coincidencias = []
try:
text = ruta.read_text(errors="ignore")
except OSError:
return coincidencias
for numero, linea in enumerate(text.splitlines(), start=1):
if aguja in linea:
coincidencias.append((numero, linea.strip()))
return coincidencias
def principal():
if len(sys.argv) < 3:
print("uso: grep_lite.py PATRÓN RUTA [RUTA...]")
raise SystemExit(1)
aguja = sys.argv[1]
total = 0
for arg in sys.argv[2:]:
raiz = Path(arg)
archivos = raiz.rglob("*") if raiz.is_dir() else [raiz]
for ruta in archivos:
if not ruta.is_file():
continue
for numero, linea in buscar_en_archivo(ruta, aguja):
print(f"{ruta}:{numero}: {linea}")
total += 1
print(f"{total} líneas coinciden")
if __name__ == "__main__":
principal()
Cómo funciona
- Lee el patrón y las rutas desde
sys.argv. rglobrecorre directorios; los archivos se escanean línea por línea.- Imprime coincidencias
ruta:linea:y un conteo final.
Palabras clave y builtins usados aquí
continuedefelseenumerateexceptforiflenprintraisereturntry
El intento, en números
- Líneas
- 37
- Caracteres a escribir
- 860
- Tokens
- 218
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 125 segundos.
Paso 4 de 5 en Bis; paso 71 de 72 en Fundamentos del lenguaje.