Formato de Cadenas en Python

PythonBeginner
Practicar Ahora

Introducción

Bienvenidos al laboratorio de Formato de Cadenas (String Formatting) en Python. Formatear cadenas correctamente es una tarea fundamental en cualquier lenguaje de programación, utilizada para todo, desde simples sentencias print hasta la generación de informes complejos y páginas web. Python ofrece varias maneras de formatear cadenas, cada una con sus propias ventajas y casos de uso.

En este laboratorio, explorarán la evolución del formato de cadenas en Python. Comenzarán con el operador tradicional %, luego pasarán al método más flexible str.format(). También dominarán las f-Strings, el enfoque moderno y recomendado introducido en Python 3.6, y aprenderán a formatear números de manera efectiva. Finalmente, descubrirán las cadenas Template, una opción segura para manejar plantillas provenientes de fuentes no confiables.

Al finalizar este laboratorio, tendrán una comprensión exhaustiva de cómo elegir y utilizar la técnica de formato de cadenas adecuada para sus proyectos en Python.

Uso del operador %

En este paso, aprenderás sobre el formato de cadenas de estilo antiguo utilizando el operador %. Este método, heredado de la función printf de C, utiliza especificadores de formato como %s para cadenas y %d para enteros para insertar valores en una cadena.

Aunque este método funciona, tiene algunas peculiaridades y es menos flexible que las alternativas modernas. Para código nuevo, se recomienda encarecidamente utilizar f-Strings o str.format().

Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor, apréndelo primero en este laboratorio.

Primero, abre el archivo step1.py desde el explorador de archivos a la izquierda.

Ahora, añade el siguiente código a step1.py para ver cómo formatear una cadena y un entero.

## Operador %: formato de cadena de estilo antiguo (no recomendado para código nuevo)
name = 'Pete'
print('Hello %s' % name)  ## %s = marcador de posición para cadena (string placeholder)

num = 5
print('I have %d apples' % num) ## %d = marcador de posición para entero (integer placeholder)

Guarda el archivo y ejecútalo desde la terminal para ver la salida.

python3 step1.py

Deberías ver la siguiente salida, donde %s ha sido reemplazado por el valor de name y %d por el valor de num.

Hello Pete
I have 5 apples

Uso de str.format

En este paso, explorará el método str.format(), que se introdujo en Python 3 (y se adaptó a la versión 2.7) como una forma más potente y flexible de formatear cadenas. Este método utiliza llaves {} como marcadores de posición (placeholders).

Puede pasar argumentos a format() y estos se insertarán en los marcadores de posición en orden. También puede usar números dentro de las llaves para referirse a los argumentos por su posición.

Abra el archivo step2.py desde el explorador de archivos.

Agregue el siguiente código a step2.py. El primer ejemplo utiliza llaves vacías y el segundo utiliza argumentos posicionales.

## str.format() method: modern string formatting (Python 2.7+)
name = 'John'
age = 20

## Arguments are inserted in order
print("Hello I'm {}, my age is {}".format(name, age))

## Arguments are inserted based on position
print("Hello I'm {0}, my age is {1}".format(name, age))

Guarde el archivo y ejecútelo en la terminal.

python3 step2.py

Ambas sentencias print producirán el mismo resultado, demostrando las dos formas de usar str.format().

Hello I'm John, my age is 20
Hello I'm John, my age is 20

Literales de Cadena Formateadas o f-Strings

En este paso, dominará las f-Strings, la forma recomendada para formatear cadenas en Python 3.6 y versiones posteriores. Una f-String es un literal de cadena prefijado con f o F. Estas cadenas le permiten incrustar expresiones de Python directamente en su interior, encerradas entre llaves {}.

Las f-Strings se evalúan en tiempo de ejecución, lo que las hace no solo concisas y legibles, sino también muy potentes.

Abra el archivo step3.py desde el explorador de archivos.

Sintaxis Básica y Expresiones

Primero, veamos la sintaxis básica y cómo incrustar expresiones. Agregue el siguiente código a step3.py.

## f-string: recommended way to format strings (Python 3.6+)
name = 'Elizabeth'
print(f'Hello {name}!')  ## f prefix allows expressions in {}

## f-strings support expressions: can include calculations inside {}
a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')

f-Strings Multilínea

También puede crear cadenas multilínea encerrando la f-String entre paréntesis. Agregue este ejemplo a step3.py.

name = 'Robert'
messages = 12
multiline_string = (
    f'Hi, {name}. '
    f'You have {messages} unread messages'
)
print(multiline_string)

El especificador = para Depuración (Debugging)

A partir de Python 3.8, puede usar el especificador = para imprimir automáticamente tanto una expresión como su valor, lo cual es muy útil para la depuración. Agregue este último fragmento de código a step3.py.

## = specifier: prints both variable name and value (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
print(f'date and time: {now=}')

Ahora, guarde el archivo y ejecútelo desde la terminal.

python3 step3.py

Verá la salida de los tres ejemplos. Tenga en cuenta que la fecha y hora en su salida serán diferentes.

Hello Elizabeth!
Five plus ten is 15 and not 30.
Hi, Robert. You have 12 unread messages
date and time: now='...'

Formato de Dígitos

En este paso, aprenderá a formatear datos numéricos dentro de las f-Strings. Esta es una característica potente para presentar datos en un formato legible para humanos. Cubriremos la adición de separadores de miles, el redondeo de números de punto flotante y la visualización de números como porcentajes.

Abra el archivo step4.py desde el explorador de archivos.

Agregue el siguiente código a step4.py para practicar diferentes técnicas de formato numérico.

## Adding thousands separator
a = 10000000
print(f"Number with separators: {a:,}")

## Rounding a float to 2 decimal places
b = 3.1415926
print(f"Rounded number: {b:.2f}")

## Showing a number as a percentage with 2 decimal places
c = 0.816562
print(f"As a percentage: {c:.2%}")

Cada especificador de formato sigue a los dos puntos : dentro de las llaves.

  • :, añade una coma como separador de miles.
  • :.2f formatea el número como un flotante con dos decimales.
  • :.2% multiplica el número por 100 y lo muestra como un porcentaje con dos decimales.

Guarde el archivo y ejecútelo desde la terminal.

python3 step4.py

Su salida debería verse así:

Number with separators: 10,000,000
Rounded number: 3.14
As a percentage: 81.66%

Como referencia, aquí hay una tabla con más opciones de formato numérico disponibles en las f-Strings:

Número Formato Salida Descripción
3.1415926 {:.2f} 3.14 Formato flotante 2 decimales
1000000 {:,} 1,000,000 Formato numérico con separador de coma
0.35 {:.2%} 35.00% Formato de porcentaje
1000000000 {:.2e} 1.00e+09 Notación exponencial

Uso de Cadenas Template (Template Strings)

En este paso, aprenderá sobre las cadenas Template del módulo incorporado string de Python. Aunque son menos potentes que las f-Strings, son una opción más segura cuando se manejan plantillas de cadenas que podrían ser generadas por usuarios. Su complejidad reducida evita la ejecución de código arbitrario, lo que puede ser un riesgo de seguridad con métodos como str.format() si no se usan con cuidado.

Las cadenas Template utilizan signos de dólar $ para marcar los marcadores de posición (placeholders) (ejemplo: $name).

Abra el archivo step5.py desde el explorador de archivos.

Agregue el siguiente código a step5.py. Necesitará importar la clase Template, crear un objeto de plantilla y luego usar el método substitute() para insertar valores.

from string import Template

name = 'Elizabeth'

## Create a Template object
t = Template('Hey $name!')

## Use the substitute() method to replace the placeholder
result = t.substitute(name=name)
print(result)

El método substitute() acepta argumentos de palabra clave (keyword arguments) donde las claves coinciden con los nombres de los marcadores de posición en la plantilla.

Guarde el archivo y ejecútelo desde la terminal.

python3 step5.py

La salida mostrará la cadena sustituida.

Hey Elizabeth!

Resumen

¡Felicidades por completar el laboratorio de Formato de Cadenas (String Formatting) en Python!

En este laboratorio, ha explorado los métodos principales para formatear cadenas en Python. Ha aprendido sobre:

  • El operador %: El formato antiguo al estilo C, que ya no se recomienda para código nuevo.
  • El método str.format(): Un método más potente y flexible que utiliza marcadores de posición {}.
  • f-Strings: El enfoque moderno, conciso y altamente recomendado para Python 3.6+ que permite incrustar expresiones directamente en las cadenas.
  • Formato de Números: Cómo utilizar especificadores de formato dentro de las f-Strings para controlar la presentación de números, incluyendo separadores, precisión y porcentajes.
  • Cadenas Template: Un mecanismo más simple y seguro para la sustitución de cadenas, ideal para manejar plantillas de fuentes externas o no confiables.

Al comprender las fortalezas y debilidades de cada método, ahora puede elegir la herramienta más adecuada para cualquier tarea de formato de cadenas que encuentre en su trayectoria de programación en Python.