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 mediante el % operador, que se conoce como el operador de formato de cadena (o interpolación). En este artículo, le mostraremos cómo usar este operador para construir cadenas con una cadena de plantilla y variables que contienen sus datos.

    El operador

    Esta forma de trabajar con texto se incluye 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 el formato posicional simple.

    los % 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:

    '%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 el segundo %s por la cadena «dos». Estas %s Las cadenas son en realidad marcadores de posición en nuestra cadena de «plantilla» e indican que las cadenas se colocarán allí.

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

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

    Como el %s es un marcador de posición para cadenas, %f es un marcador de posición para números de punto flotante. El «.2» antes del f es lo que indica cuántos dígitos queremos que se muestren 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 marcadores de posición con más detalle:

    %C

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

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

    Si proporciona más de un carácter como variable aquí, se generará una excepción.

    % s

    Este marcador de posición utiliza la conversión de cadenas a través de str() antes de formatear. Entonces, cualquier valor que se pueda convertir en una cadena a través de str() se puede utilizar aquí.

    >>> 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 representan un entero decimal con signo.

    >>> 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 en su lugar se proporciona un valor de punto flotante.

    % u

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

    % o

    Este marcador de posición representa un entero octal.

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

    Representa un entero hexadecimal con letras minúsculas (af).

    >>> 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 con letras mayúsculas (AF).

    >>> 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.

    %mi

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

    %MI

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

    %F

    Representa un número real de coma flotante.

    >>> price = 15.95
    >>> print("the price is %.2f" % price)
    the price is 15.95
    
    %gramo

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

    %GRAMO

    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.

    Alinear 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 pone cualquier espacio adicional a la derecha del placholder. El carácter de relleno único es un espacio y no se puede cambiar.

    >>> 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:

    >>> 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. Eche un vistazo a Redondear números en Python para aprender 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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *