Aprende leyendo en orden

string y textwrap — Constantes de caracteres, plantillas y formato

Aprende las constantes string.ascii_letters / digits, la sustitución $name de string.Template y la eliminación de sangrado con textwrap.dedent más el ajuste de ancho con fill.

Para qué sirven string y textwrap

string y textwrap son módulos auxiliares que complementan el manejo cotidiano de cadenas. string ofrece constantes de caracteres (conjuntos de letras, dígitos y símbolos) y Template (sustitución de plantillas estilo $name); textwrap se encarga del formato de cadenas multilínea (eliminación de sangría y ajuste de ancho). Los usarás cuando las f-strings o replace no sean suficientes.

Cuándo usar string y cuándo textwrap
módulo stringconstantes + Templatecomprobación letra / dígitoplantillas de emailmódulo textwrapdedent + fillquitar sangríaajuste de anchocasos de usocasos de uso
string brilla en conjuntos de caracteres y sustitución de plantillas, mientras que textwrap se ocupa de mejorar el aspecto de cadenas multilínea. Ambos son módulos de la biblioteca estándar y, como sus casos de uso no se solapan, lo más fácil es recordarlos por su función.

string — Constantes de caracteres y sustitución de plantillas

El módulo string tiene dos tipos de funciones. La primera son las constantes de caracteres como string.ascii_letters (52 letras), string.digits (09) y string.punctuation (símbolos), que te ahorran definir tú mismo "qué cuenta como letra / dígito".

La segunda es string.Template: incrustas variables prefijadas con $ estilo $name en una cadena y luego las reemplazas con substitute(name="valor"). Se parece a las f-strings (f"{name}"), pero Template tiene un parser simple y seguro, lo que lo hace ideal cuando la plantilla misma proviene de entrada del usuario (como plantillas de cuerpo de email).

Qué ofrece string
constantesascii_letters / digits"¿solo letras?"comprobación / generaciónTemplateplantilla estilo $namesubstitute(name=valor)reemplazo
Las constantes de caracteres se usan para comprobar o generar "letras / dígitos / símbolos". Template es un motor de plantillas ligero y seguro que reemplaza marcadores estilo $name en una cadena por valores mediante substitute.
Constante / ClaseContenidoUso
string.ascii_lowercaseabcdefghijklmnopqrstuvwxyz26 letras minúsculas
string.ascii_uppercaseABCDEFGHIJKLMNOPQRSTUVWXYZ26 letras mayúsculas
string.ascii_letterslas dos anteriores unidas (52 caracteres)comprobación de letras, generación de cadenas aleatorias
string.digits0123456789comprobación de dígitos
string.punctuation! " # $ % & ' ... etc.comprobación de símbolos
string.Template(s)clase de plantilla estilo $namecuerpos de email, plantillas de notificaciones

Construye una plantilla de email de confirmación de pedido con string.Template, e inserta un nombre de cliente y un número de pedido.

① Importa el módulo string.

② Imprime la longitud total de la constante de letras con el formato Letras: ◯ (obtendrás 52 — mayúsculas + minúsculas).

③ Imprime el contenido de la constante de dígitos con el formato Dígitos: ◯◯.

④ Construye un objeto Template a partir de la cadena "Hello, $name! Order #$order_id is ready.".

⑤ Imprime el resultado de sustituir name="Ana" y order_id=1234.

(Si lo ejecutas correctamente, aparecerá una explicación.)

Editor Python

Ejecutar el código para ver el resultado

textwrap — Quitar sangrías de triple comilla y ajustar ancho

textwrap es un módulo de la biblioteca estándar para embellecer cadenas. Las dos funciones que más usarás son textwrap.dedent (que elimina la sangría inicial común de un texto escrito en triple comilla) y textwrap.fill (que ajusta una cadena larga a un ancho dado).

Cuando escribes cadenas multilínea como """...""" en el código, la sangría a nivel de código fuente queda incrustada en la propia cadena. dedent elimina solo el espacio en blanco inicial común, así tu código sigue bien indentado mientras la cadena resulta limpia.

Cómo funciona textwrap.dedent
cadena en el código Hola Buen día hoytextwrap.dedentcadena limpiaHolaBuen día hoy
Elimina la sangría inicial común incrustada en una cadena con triple comilla, dejando la estructura del código intacta mientras limpia la cadena. Detecta automáticamente la cantidad de espacios iniciales comunes a todas las líneas y los quita.
FunciónQué haceDevuelve
textwrap.dedent(text)elimina la sangría inicial comúnla cadena limpia
textwrap.fill(text, width=N)ajusta al ancho N como una sola cadenauna sola cadena con saltos de línea
textwrap.wrap(text, width=N)divide en líneas al ancho Nlista de cadenas
textwrap.shorten(text, w)si el resultado no cabría en el ancho N, termina con [...]la cadena truncada
import textwrap

# dedent: quitar la sangría de una cadena con triple comilla
raw = """
    Hola.
    Qué buen día hoy.
    """
print(textwrap.dedent(raw).strip())
# Hola.
# Qué buen día hoy.

# fill: ajuste de ancho (el inglés lo muestra mejor)
long_text = "Python is a language that lets you work quickly and integrate systems."
print(textwrap.fill(long_text, width=30))
# Python is a language that
# lets you work quickly and
# integrate systems.

Combina dedent con strip

Las cadenas con triple comilla a menudo empiezan y terminan con un salto de línea, por lo que el one-liner textwrap.dedent(raw).strip() (dedent + recortar espacios alrededor) es un patrón común. strip es un método de cadena built-in que elimina espacios en blanco (incluidos saltos de línea) de ambos extremos.

Limpia una plantilla de mensaje de error escrita con sangría usando dedent, y luego ajusta una frase en inglés con fill.

① Importa textwrap.

② Define una cadena en inglés de 2 líneas, con sangría de 4 espacios, dentro de una triple comilla (con líneas vacías al inicio y al final).

③ Quita la sangría y los espacios en blanco alrededor, y luego imprime --- después de dedent --- antes del resultado formateado.

④ Ajusta la frase en inglés "Python is a language that lets you work quickly and integrate systems." a un ancho de 30 caracteres, e imprime --- después de fill --- antes del resultado.

Editor Python

Ejecutar el código para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál es el resultado de string.Template("Hi $name").substitute(name="Carlos")?

Pregunta 2¿Cuál elimina la sangría inicial común de un texto escrito en triple comilla (con sangría a nivel de código fuente)?

Pregunta 3¿Qué hace textwrap.fill(text, width=20)?