Interpolación de cadenas de Python con el operador de porcentaje (%)

Hay varias formas diferentes de formatear cadenas en Python, una de las cuales se realiza con el operador %, que se conoce como formato de cadena (o interpo...

Hay varias formas diferentes de formatear cadenas en Python, una de las cuales se realiza mediante el operador %, que se conoce como operador de formato (o interpolación) de cadenas. En este artículo, le mostraremos cómo usar este operador para construir cadenas con una cadena de plantilla y variables que contengan sus datos.

El operador %

Esta forma de trabajar con texto se ha incluido en Python desde el principio, y también se conoce como formato de estilo C, ya que se origina en el lenguaje de programación C. Otra descripción es formato posicional simple.

El operador % le dice al intérprete de Python que formatee una cadena usando un conjunto dado de variables, encerradas en una tupla, siguiendo al operador. Un ejemplo muy simple de esto es el siguiente:

1
'%s is smaller than %s' % ('one', 'two')

El intérprete de Python sustituye la primera aparición de %s en la cadena por la cadena dada "uno", y la segunda %s por la cadena "dos". Estas cadenas %s son en realidad marcadores de posición en nuestra cadena "plantilla", e indican que las cadenas se colocarán allí.

Como primer ejemplo, a continuación demostramos usando Python REPL cómo imprimir un valor de cadena y un valor flotante:

1
2
>>> print("Mr. %s, the total is %.2f." % ("Jekyll", 15.53))
'Mr. Jekyll, the total is 15.33.'

Al igual que %s es un marcador de posición para cadenas, %f es un marcador de posición para números de coma flotante. El ".2" antes de la f es lo que indica cuántos dígitos queremos mostrar después del punto decimal.

Estos son solo dos ejemplos simples de lo que es posible, y se admiten muchos más tipos de marcadores de posición. Aquí está la lista completa de tipos de marcador de posición con más detalle:

%C

Este marcador de posición representa un solo carácter.

1
2
>>> print("The character after %c is %c." % ("B", "C"))
The character after B is C.

Proporcionar más de un solo carácter como variable aquí generará una excepción.

%s

Este marcador de posición utiliza la conversión de cadenas a través de str() antes del formateo. Así que aquí se puede usar cualquier valor que se pueda convertir en una cadena a través de str().

1
2
3
>>> place = "New York"
>>> print("Welcome to %s!" % place)
Welcome to New York!

Aquí solo tenemos un único elemento para usar en nuestro formato de cadena y, por lo tanto, no estamos obligados a encerrar el elemento en una tupla como en los ejemplos anteriores.

%i y %d

Estos marcadores de posición representan un entero decimal con signo.

1
2
3
>>> year = 2019
>>> print("%i will be a perfect year." % year)
2019 will be a perfect year.

Dado que este marcador de posición espera un decimal, se convertirá en uno si se proporciona un valor de punto flotante en su lugar.

%t

Este marcador de posición representa un entero decimal sin signo.

%s

Este marcador de posición representa un entero octal.

1
2
3
>>> number = 15
>>> print("%i in octal is %o" % (number, number))
15 in octal is 17
%X

Representa un entero hexadecimal usando letras minúsculas (a-f).

1
2
3
>>> number = 15
>>> print("%i in hex is %02x" % (number, number))
15 in hex is 0f

Al usar el prefijo "02" en nuestro marcador de posición, le estamos diciendo a Python que imprima una cadena hexadecimal de dos caracteres.

%X

Representa un entero hexadecimal usando letras mayúsculas (A-F).

1
2
3
>>> number = 15
>>> print("%i in hex is %04X" % (number, number))
15 in hex is 000F

Y como en el ejemplo anterior, al usar el prefijo "04" en nuestro marcador de posición, le estamos diciendo a Python que imprima una cadena hexadecimal de cuatro caracteres.

%v

Representa una notación exponencial con "e" minúscula.

%Y y}

Representa una notación exponencial con "e" mayúscula.

#####%f

Representa un número real de coma flotante.

1
2
3
>>> price = 15.95
>>> print("the price is %.2f" % price)
the price is 15.95
% g

La versión más corta de %f y %e.

%G

La versión más corta de %f y %E.

Los marcadores de posición que se muestran arriba le permiten formatear cadenas especificando tipos de datos en sus plantillas. Sin embargo, estas no son las únicas características del operador de interpolación. En la siguiente subsección, veremos cómo podemos rellenar nuestras cadenas con espacios usando el operador %.

Alineación de la salida

Hasta ahora, solo hemos mostrado cómo formatear cadenas de texto especificando marcadores de posición simples. Con la ayuda de un valor numérico adicional, puede definir el espacio total que se reservará a cada lado de una variable en la cadena de salida.

Como ejemplo, el valor de %10s reserva 10 caracteres, con el espacio adicional en el lado izquierdo del marcador de posición, y un valor de %-10s coloca cualquier espacio adicional a la derecha del marcador de posición. El carácter de relleno único es un espacio y no se puede cambiar.

1
2
3
4
5
>>> place = "London"
>>> print ("%10s is not a place in France" % place)  # Pad to the left
      London is not a place in France
>>> print ("%-10s is not a place in France" % place) # Pad to the right
London     is not a place in France

Tratar con números funciona de la misma manera:

1
2
3
4
>>> print ("The postcode is %10d." % 25000)    # Padding on the left side
The postcode is      25000.
>>> print ("The postcode is %-10d." % 25000)   # Padding on the right side
The postcode is 25000     .

Truncar cadenas y redondear números es la contraparte del relleno. Echa un vistazo a Redondeo de números en Python para saber más sobre las trampas que se esconden aquí.

Conclusión

En este artículo, vimos cómo el operador de interpolación (también conocido como formateo) es una forma poderosa de formatear cadenas, lo que le permite especificar el tipo de datos, la precisión del punto flotante e incluso el espaciado/relleno.

Licensed under CC BY-NC-SA 4.0