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 *