miércoles, 4 de febrero de 2026

Automatizacion con Python - Cap1 - parte 2

Python // Automation Cookbook

Capítulo 1: Comencemos Nuestro Viaje de Automatización

Parte 2: Formateo y Manipulación de Cadenas

Una de las habilidades básicas al tratar con la creación de texto y documentos es poder formatear correctamente los valores en cadenas estructuradas. Python es inteligente al presentar buenos valores predeterminados, pero hay muchas opciones y posibilidades que exploraremos.

RECETA_03

Crear Cadenas con Valores Formateados

La herramienta principal para formatear cadenas en Python es el método format. Funciona con un mini-lenguaje definido para renderizar variables:

sintaxis básica
result = template.format(*parameters)

Ejemplos Básicos

python
>>> 'Pon el valor aquí: {}'.format('STRING')
"Pon el valor aquí: STRING"

>>> 'Cualquier tipo ({}) y más de uno ({})'.format(1.23, 'STRING')
"Cualquier tipo (1.23) y más de uno (STRING)"

>>> 'Especifica el orden: {1}, {0}'.format('primero', 'segundo')
'Especifica el orden: segundo, primero'

>>> 'Nombra parámetros: {first}, {second}'.format(second='SEGUNDO', first='PRIMERO')
'Nombra parámetros: PRIMERO, SEGUNDO'

Cómo Hacerlo - Tabla Alineada

Vamos a crear un script que imprima una tabla alineada con formato profesional:

recipe_format_strings.py
# DATOS DE ENTRADA
data = [
    (1000, 10),
    (2000, 17),
    (2500, 170),
    (2500, -170),
]

# Imprime el encabezado
print('INGRESOS | GANANCIA | PORCENTAJE')

# Plantilla con formato
TEMPLATE = '{revenue:>7,} | {profit:>+6} | {percent:>7.2%}'

# Imprime las filas
for revenue, profit in data:
    row = TEMPLATE.format(revenue=revenue, profit=profit, 
                          percent=profit / revenue)
    print(row)
python recipe_format_strings.py
INGRESOS | GANANCIA | PORCENTAJE
1,000 | +10 | 1.00%
2,000 | +17 | 0.85%
2,500 | +170 | 6.80%
2,500 | -170 | -6.80%

Cómo Funciona

La constante TEMPLATE define tres columnas con especificaciones de formato:

  • {revenue:>7,} — Ancho 7, alineado a la derecha, separador de miles
  • {profit:>+6} — Ancho 6, alineado a la derecha, signo + para positivos
  • {percent:>7.2%} — Ancho 7, 2 decimales, formato porcentaje

F-Strings (Python 3.6+)

Una característica más moderna son los f-strings que permiten formateo inline:

python
>>> param1 = 'primero'
>>> param2 = 'segundo'
>>> f'Parámetros {param1}:{param2}'
'Parámetros primero:segundo'

# Para incluir llaves literales, duplicarlas:
>>> value = 'VALOR'
>>> f'Entre llaves {{{value}}}'
'Entre llaves {VALOR}'
Los f-strings simplifican mucho el código y permiten crear código muy descriptivo y legible. Sin embargo, asegúrate de que las variables estén definidas en el momento de evaluación.
RECETA_04

Manipular Cadenas

Cuando se trabaja con texto, a menudo es necesario manipularlo y procesarlo: unirlo, dividirlo en fragmentos, o cambiarlo a mayúsculas o minúsculas.

Ejemplo Práctico

Transformemos un informe: redactar números, formatear a 80 caracteres por línea, convertir a ASCII y capitalizar como título.

texto original
AFTER THE CLOSE OF THE SECOND QUARTER, OUR COMPANY, CASTAÑACORP
HAS ACHIEVED A GROWTH IN THE REVENUE OF 7.47%. THIS IS IN LINE
WITH THE OBJECTIVES FOR THE YEAR...

Paso a Paso

1. Dividir en palabras:

python
>>> words = INPUT_TEXT.split()

2. Reemplazar dígitos con 'X':

python
>>> redacted = [''.join('X' if w.isdigit() else w for w in word) 
              for word in words]

3. Transformar a ASCII puro:

python
>>> ascii_text = [word.encode('ascii', errors='replace').decode('ascii')
               for word in redacted]

4. Agrupar en líneas de 80 caracteres:

python
>>> LINE_SIZE = 80
>>> lines = []
>>> line = ''
>>> for word in newlines:
...     if line.endswith('\n') or len(line) + len(word) + 1 > LINE_SIZE:
...         lines.append(line)
...         line = ''
...     line = line + ' ' + word

5. Formatear como título y unir:

python
>>> lines = [line.title() for line in lines]
>>> result = '\n'.join(lines)

Métodos Útiles de Cadenas

  • string[0:2] — Slicing: "word"[0:2] retorna "wo"
  • .splitlines() — Separar por caracteres de nueva línea
  • .upper() / .lower() — Convertir a mayúsculas/minúsculas
  • .replace(old, new) — Reemplazar subcadenas
  • .strip() — Eliminar espacios al inicio y final
¡Cuidado con .replace()! Puede generar reemplazos inesperados. Por ejemplo: 'bring'.replace('ring', 'necklace') produce 'bnecklace'.

Para ajustar líneas de texto automáticamente, puedes usar el módulo textwrap de la biblioteca estándar:

python
import textwrap

wrapped = textwrap.fill(text, width=80)

Basado en "Python Automation Cookbook" // Jaime Buelta

Traducción al español // Capítulo 1, Parte 2 de 5