REVIT ARCHITECTURE (991) – PYTHON – Bucles (75) – Extraer la parte antes de @ con for + break (y aplicarlo a Revit)

Objetivo: mostrar cómo recorrer una dirección de correo carácter a carácter, detener el recorrido al encontrar @ (con break) y obtener —en una sola línea de salida— la parte antes de la arroba. Luego aplicar el mismo patrón a un parámetro de Revit.

Ejemplo Python

Explicación línea por línea

email = «maria.perez@ejemplo.org»

Definimos la cadena que contiene la dirección de correo. Esta es la secuencia de caracteres que vamos a recorrer.

local = «»

Inicializamos una variable local como cadena vacía. La usaremos para acumular los caracteres que están antes de la @.

for caracter in email:

Iniciamos un bucle for que itera carácter a carácter sobre la cadena email. En cada vuelta la variable caracter toma el siguiente carácter de la cadena.

if caracter == «@»:

Comprobamos si el carácter actual es exactamente la arroba @. Esta es la condición para detener la recolección.

break

Si la condición se cumple, break interrumpe el bucle inmediatamente y la ejecución continúa en la siguiente línea fuera del for. No se procesan más caracteres.

local += caracter

Si no hemos encontrado la @, concatenamos el carácter actual al final de la cadena local. Así vamos construyendo la parte inicial del correo.

print(local)

Una vez terminado el bucle (por haber llegado a la @ o por haber recorrido toda la cadena), imprimimos la parte acumulada en local. Si la @ estaba presente, es la parte antes de la arroba. Si no había @, imprimirá la cadena completa.

Comportamiento / casos especiales

Si email = «@dominio.com» → local queda «» (cadena vacía).

Si no hay @ en la cadena → el for termina naturalmente y local contendrá toda la dirección.

Alternativa más compacta (muy pythonic): local = email.split(«@», 1)[0].

Aplicación práctica en Revit (pseudocódigo)

Imagina que en tu modelo Revit cada elemento tiene un parámetro OwnerEmail y quieres extraer la parte local (antes de @) para copiarla al parámetro OwnerName del elemento. En Revit hay que leer parámetros y, si vas a escribir en el documento, hacerlo dentro de una Transaction. A continuación un ejemplo ilustrativo (pseudocódigo) que utiliza el mismo patrón for + break.

Explicación línea por línea (Revit)

elementos = obtener_elementos_revit()

Obtenemos la colección de elementos del modelo que queremos procesar (puede venir de un FilteredElementCollector o función wrapper). elementos es iterable.

for elem in elementos:

Recorremos cada elemento del conjunto.

param_email = elem.LookupParameter(«OwnerEmail»)

Intentamos recuperar el parámetro llamado «OwnerEmail» del elemento. Si el parámetro no existe, LookupParameter devuelve None (según la API).

if not param_email:

Si no hay tal parámetro, usamos continue para pasar al siguiente elemento (no hay email que procesar).

email = param_email.AsString() or «»

Leemos el valor del parámetro como cadena (método típico en la API de Revit). Si es None, lo convertimos en cadena vacía para evitar errores.

local = «»

Inicializamos la variable local donde acumularemos la parte antes de @.

for ch in email:

Iteramos carácter a carácter la cadena del email.

if ch == «@»:

Detectamos la arroba.

break

Si encontramos @, interrumpimos el bucle interno; ya no necesitamos procesar más caracteres.

local += ch

Si no es @, concatenamos el carácter a local.

if not local:

Si, tras el bucle, local está vacío (p. ej. email vacío o empieza por @), no escribimos nada y saltamos.

t = Transaction(doc, «Asignar OwnerName»)

Abrimos una transacción para agrupar cambios en el documento Revit (necesario al escribir).

t.Start()

Iniciamos la transacción.

try: … t.Commit() / t.RollBack()

Intentamos escribir el valor en el parámetro OwnerName. Si hay error hacemos Rollback, si todo va bien hacemos Commit. Esto garantiza que no dejamos el documento en estado inconsistente.

param_owner = elem.LookupParameter(«OwnerName»)

Recuperamos el parámetro destino.

if param_owner and not param_owner.IsReadOnly:

Comprobamos que existe y que no está en solo lectura antes de asignarle el valor.

param_owner.Set(local)

Escribimos la parte local (antes de @) en el parámetro OwnerName.

Notas y buenas prácticas

  • Por qué usar for + break aquí: el patrón es explícito y útil cuando quieres procesar un flujo de caracteres y detenerte ante un delimitador. Sirve bien en casos donde no quieras o no puedas usar métodos de cadena (por ejemplo, por razones didácticas o por procesamiento especial carácter a carácter).
  • Alternativa más corta (Pythonic): local = email.split(«@», 1)[0] — obtiene lo mismo en una línea; en Revit, si no hay @, devuelve la cadena completa.
  • Validaciones en Revit: siempre valida parámetros, maneja None, y escribe dentro de transacciones. Además, evita abrir y cerrar una transacción por cada elemento si vas a procesar muchos: agrútalos por lotes para mejorar rendimiento.
  • Casos límite: si el email es «@dominio.com» la parte local será «» — decide cómo quieres manejarlo (saltar, avisar, marcar error).

El ejemplo Python muestra claramente cómo recorrer y detenerse con break.

El patrón se traslada a Revit para extraer y copiar información desde parámetros de elemento, con la diferencia práctica de que en Revit hay que gestionar la escritura mediante transacciones y validar los parámetros.

Bonus 1: break vs continue en Python

En el artículo vimos cómo usar break para detener un bucle cuando encontramos un carácter específico (@).
Pero existe otra instrucción parecida: continue.

break → sale completamente del bucle.

continue → salta la iteración actual y continúa con la siguiente.

Ejemplo práctico

Salida:

abcd

Aquí no se rompe el bucle; simplemente se ignora el carácter @ y se siguen imprimiendo los demás.

En Revit (idea rápida)

Con break → dejarías de procesar un parámetro al encontrar un delimitador (como @).

Con continue → simplemente saltarías ese carácter (o parámetro vacío) y seguirías procesando el resto.

Bonus 2: Crear y guardar un archivo Python

Cuando escribes programas en Python, no siempre lo haces en la consola interactiva (Shell window). Generalmente trabajas en un editor donde puedes escribir, guardar y volver a abrir tu código.

Pasos básicos:

  1. Abrir el editor

    • Puede ser el editor integrado en IDLE o uno más avanzado como VS Code, PyCharm o incluso un bloc de notas.

    • Aquí escribes tu programa completo (no solo una línea como en la Shell).

  2. Escribir el código

    3. Guardar el archivo

    • Selecciona File → Save As…

    • Escribe un nombre.

    • La extensión .py es obligatoria para que Python lo reconozca como un script.

    • Diferencia Editor vs. Shell

      • Editor Window → donde escribes y guardas archivos .py.

      • Shell Window (consola interactiva) → donde ejecutas instrucciones sueltas, pruebas rápidas o ves la salida de tus programas.

4. El sistema operativo y los .py

  • Cuando haces doble clic en un archivo .py, tu sistema operativo (Windows, Mac, Linux) sabe que debe abrirlo con el intérprete de Python.

  • Esto es gracias a la extensión .py, que actúa como «puente» entre tu archivo y Python.

En resumen:

  • La editor window es para escribir y guardar programas.

  • La shell window es para probar y ejecutar código al instante.

  • Los archivos .py son el formato estándar de scripts de Python y cualquier OS sabe cómo abrirlos con el intérprete instalado.

Licencia Creative Commons Contenido Web de Yolanda Muriel está sujeto bajo Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.

Deja un comentario