Artículo original escrito por Jessica Wilkins
Artículo original Python String Format – Python S Print Format Example  
Traducido y adaptado por andres-torres

En Python, tenemos algunas opciones para dar formato a las cadenas de texto. En este artículo, veremos el formato con cadenas str.format(), literales de cadena y de plantilla.

Pero primero, miremos la forma "tradicional" de formatear cadenas.

¿Qué es el formato % string  en Python?

Una de las maneras habituales de formatear cadenas en Python es emplear el operador %.

He aquí la sintaxis básica:

"This is a string %s" % "string value goes here"

Puedes crear cadenas y usar %s adentro de la cadena que funciona como un marcador. Entonces puedes escribir  % seguido del valor actual de la cadena que deseas usar.

A continuación un ejemplo básico usando el formato de cadenas con % .

print("Hi, my name is %s" % "Jessica")
Screen-Shot-2021-09-06-at-10.31.53-PM

Este método es ocasionalmente designado como la forma "tradicional". Sin embargo, Python 3 introdujo el  str.format() junto con formato para literales de cadena.

¿Qué es el método str.format() en Python?

La sintaxis del método str.format() es la siguiente:

"template string {}".format(arguments)

Al interior de la cadena de plantilla podemos usar {} como marcador para los argumentos. Los argumentos son valores que serán mostrados en la cadena.

En este ejemplo, queremos imprimir lo siguiente"Hello, my name is Jessica. I am a musician turned programmer."

En la cadena, tendremos un total de tres {} marcadores para los tres valores: "Jessica", "musician", y "programmer". Estos son llamados también campos de formato.

"Hello, my name is {}. I am a {} turned {}."

Dentro de estos paréntesis con el str.format(), usaremos los valores de "Jessica", "musician", y "programmer".

.format("Jessica", "musician", "programmer")

He aquí el código completo:

print("Hello, my name is {}. I am a {} turned {}.".format("Jessica", "musician", "programmer"))
Screen-Shot-2021-09-03-at-10.32.14-PM

Argumentos posicionales

Puedes acceder al valor de estos argumentos usando un número como índice adentro de  {}.

En este ejemplo, los argumentos de "trumpet" y "drums" adentro del .format().

.format("trumpet", "drums")

Podemos acceder a estos valores dentro de la cadena efectuando una referencia a los números índices. {0} representa el primer argumento de "trumpet" , mientras que {1} es el segundo argumento de "drums".

"Steve plays {0} and {1}."

Siendo el predicado completo el siguiente:

print("Steve plays {0} and {1}.".format("trumpet", "drums"))
Screen-Shot-2021-09-03-at-11.04.33-PM

Podemos modificar este ejemplo y cambiar los números índices en la cadena. Es de notar que la oración ha cambiado y el lugar de los argumentos es diferente.

print("Steve plays {1} and {0}.".format("trumpet", "drums"))
Screen-Shot-2021-09-03-at-11.06.17-PM

Argumentos de palabras clave.

Estos argumentos consisten de un par key value, es decir, de un dúo entre clave y valor. Podemos acceder al valor del argumento(value), usando la clave key al interior del {}.

En este ejemplo, tenemos dos claves llamadas organization y adjective. Usaremos estas claves adentro de la cadena.

"{organization} is {adjective}!"

Al interior de .format(), se encuentran los pares key value.

Finalmente, redactamos la sentencia de código completa.

print("{organization} is {adjective}!".format(organization="freeCodeCamp", adjective="awesome"))
Screen-Shot-2021-09-03-at-11.44.14-PM

¿Cómo mezclar palabras clave y argumentos posicionales?

En str.format() esto es posible.

En este ejemplo, crearemos una narrativa corta acerca de ir a Disneylandia.

Primero necesitamos crear unas cuantas variables, por nombre, número, adjetivo y tipo de paseo en Disneylandia.

name = "Sam"
adjective = "amazing"
number = 200
disney_ride = "Space Mountain"

Cuando queremos crear nuestra propia cadena de texto usando palabras clave y argumentos posicionales. Añadimos \n  para crear una nueva línea después de cada oración.

"I went to {0} with {name}.\nIt was {adjective}.\nWe waited for {hours} hours to ride {ride}."

Dentro del paréntesis de  str.format(), asignaremos nuestras variables a las claves de  name, adjective, hours y disney_ride. {0} tendrá el valor de "Disneyland".

.format("Disneyland", name=name, adjective=adjective, hours=number, ride=disney_ride)

A continuación el código completo y el resultado final:

name = "Sam"
adjective = "amazing"
number = 200
disney_ride = "Space Mountain"

print("I went to {0} with {name}.\nIt was {adjective}.\nWe waited for {hours} hours to ride {ride}."
      .format("Disneyland", name=name, adjective=adjective, hours=number, ride=disney_ride))
Screen-Shot-2021-09-04-at-12.20.41-AM

¿Qué son los formatos de literales de cadenas?

Los literales de cadenas (o f-strings) nos permiten introducir expresiones al interior de una cadena. Funcionan introduciendo un  f o F para indicar al programa que debe usar f-string.

La sintaxis es la siguiente:

variable = "some value"
f"this is a string {variable}"

Veamos un ejemplo básico que imprime la oración Maria and Jessica have been friends since grade school.

name = "Jessica"
print(f"Maria and {name} have been friends since grade school.")

Funciona también si usas la mayúscula F previo a la cadena.

name = "Jessica"
print(F"Maria and {name} have been friends since grade school.")
Screen-Shot-2021-09-06-at-6.21.48-PM

Finalmente, también es posible emplear f-string para dar formato a un diccionario.

En este ejemplo, tenemos un diccionario que representa los rankings de los jugadores de basquetbol junto con el número de juegos que han ganado.

rankings = {"Gonzaga": 31, "Baylor": 28, "Michigan": 25, "Illinois": 24, "Houston": 21}

Podemos usar un for loop y el método items() para cada uno de los pareskey value del diccionario rankings.

for team, score in rankings.items():

Dentro de for loop, podemos usar f-string para dar formato a los resultados.

El uso de : para  {team:10} y {score:10d} da la instrucción de crear un campo con 10 caracteres de longitud.

La d interior de {score:10d} se refiere a un entero decimal.

 print(f"{team:10} ==> {score:10d}")

Veamos nuestro código completo:

rankings = {"Gonzaga": 31, "Baylor": 28, "Michigan": 25, "Illinois": 24, "Houston": 21}

for team, score in rankings.items():
    print(f"{team:10} ==> {score:10d}")
Screen-Shot-2021-09-06-at-9.48.53-PM

¿Qué son las plantillas de cadenas?

Las plantillas de cadenas son cadenas en Python que emplean marcadores para valores reales.

Observemos la siguiente sintaxis:

Template("$placeholder").substitute(placeholder="real value")

Miremos un ejemplo, queremos imprimir I love to learn with freeCodeCamp! usando plantillas de cadenas.

Para usar plantillas de cadenas, primero importamos la clase Template de la biblioteca estándar.

from string import Template

Podemos usar la clase Template y crear una cadena al interior del paréntesis. Introduciremos $ en frente de name que luego se reemplazará por un valor real.

Template("I love to learn with $name!")

Luego añadimos .substitute para asignar el valor de freeCodeCamp aname.

.substitute(name="freeCodeCamp")

Véase el resultado final:

from string import Template

print(Template("I love to learn with $name!").substitute(name="freeCodeCamp"))
Screen-Shot-2021-09-06-at-10.11.27-PM

Conclusión

Existen varias formas de dar formato a tus cadenas de texto en Python.

La manera tradicional es usando el operador  %.

"This is a string %s" % "string value goes here"

%s actúa como marcador para el valor real. Solo necesitas indicar el valor real después del operador %.

Esta es la forma tradicional o "antigua", debido a que Python 3 introdujo el str.format() así como literales de cadena (f-strings).

En el método str.format(), se emplean{} como marcadores, y se introducen los valores reales dentro del paréntesis. Este método puede tomar argumentos posicionales así como de palabras claves.

"template string {}".format(arguments)

Literales de cadena formateados (or f-strings) te permiten incluir expresiones dentro de tus cadenas. Justo antes de la cadena; introduce un  f o F para indicar al programa que debe usar f-string.

variable = "some value"
f"this is a string {variable}"

También puedes usar plantillas de cadenas, importando la clase Template de la biblioteca estándar. Plantillas de cadenas son cadenas de Python que usan marcadores para los valores reales.

Template("$placeholder").substitute(placeholder="real value")

Espero este artículo haya sido de utilidad en tu aprendizaje de Python.

¡Feliz Aprendizaje!