Formato de cadena de Python ()

El método string format () formatea la cadena dada en una salida más agradable en Python.

La sintaxis del format()método es:

 template.format (p0, p1,…, k0 = v0, k1 = v1,…)

Aquí, p0, p1,… son argumentos posicionales y, k0, k1,… son argumentos de palabras clave con valores v0, v1,… respectivamente.

Y la plantilla es una mezcla de códigos de formato con marcadores de posición para los argumentos.

Formato de cadena () Parámetros

format()El método toma cualquier número de parámetros. Pero, se divide en dos tipos de parámetros:

  • Parámetros posicionales : lista de parámetros a los que se puede acceder con el índice del parámetro entre llaves(index)
  • Parámetros de palabras clave : lista de parámetros de tipo clave = valor, a los que se puede acceder con la clave del parámetro entre llaves(key)

Valor de retorno del formato de cadena ()

El format()método devuelve la cadena formateada.

¿Cómo funciona el formato de cadena ()?

El format()lee el tipo de argumentos que se le pasan y formatos de acuerdo a los códigos de formato definido en la cadena.

Para argumentos posicionales

Argumentos posicionales

Aquí, el argumento 0 es una cadena "Adam" y el argumento 1 es un número flotante 230.2346.

Nota: la lista de argumentos comienza desde 0 en Python.

La cadena "Hello (0), your balance is (1:9.3f)"es la cadena de plantilla. Contiene los códigos de formato para formatear.

Las llaves son solo marcadores de posición para colocar los argumentos. En el ejemplo anterior, (0) es un marcador de posición para "Adam" y (1: 9.3f) es un marcador de posición para 230.2346.

Dado que la cadena de plantilla hace referencia a format()argumentos como (0)y (1), los argumentos son argumentos posicionales. También se puede hacer referencia a ambos sin los números como ()y Python los convierte internamente en números.

Internamente,

  • Puesto que "Adán" es el 0 º argumento, se coloca en el lugar de (0). Dado (0)que no contiene ningún otro código de formato, no realiza ninguna otra operación.
  • Sin embargo, no es el caso del primer argumento 230.2346. Aquí, (1:9.3f)coloca 230.2346 en su lugar y realiza la operación 9.3f.
  • f especifica que el formato se trata de un número flotante. Si no se especifica correctamente, dará un error.
  • La parte antes del "." (9) especifica el ancho / relleno mínimo que puede tomar el número (230.2346). En este caso, a 230.2346 se le asigna un mínimo de 9 plazas incluyendo el ".".
    Si no se especifica ninguna opción de alineación, se alinea a la derecha de los espacios restantes. (Para cadenas, está alineado a la izquierda).
  • La parte después del "." (3) trunca la parte decimal (2346) hasta el número dado. En este caso, 2346 se trunca después de 3 lugares.
    Los números restantes (46) se redondean dando 235.

Para argumentos de palabras clave

Argumentos de palabras clave

Hemos utilizado el mismo ejemplo anterior para mostrar la diferencia entre los argumentos posicionales y de palabras clave.

Aquí, en lugar de solo los parámetros, hemos utilizado un valor-clave para los parámetros. Es decir, name = "Adam" y blc = 230.2346.

Dado que estos parámetros están referenciados por sus claves como (nombre) y (blc: 9.3f), se conocen como palabras clave o argumentos con nombre.

Internamente,

  • El marcador de posición (nombre) se reemplaza por el valor de nombre - "Adam". Como no contiene ningún otro código de formato, se coloca "Adam".
  • Para el argumento blc = 230.2346, el marcador de posición (blc: 9.3f) se reemplaza por el valor 230.2346. Pero antes de reemplazarlo, como en el ejemplo anterior, realiza la operación 9.3f en él.
    Esto genera 230.235. La parte decimal se trunca después de 3 lugares y los dígitos restantes se redondean. Asimismo, al ancho total se le asigna 9 dejando dos espacios a la izquierda.

Formateo básico con formato ()

El format()método permite el uso de marcadores de posición simples para formatear.

Ejemplo 1: formato básico para argumentos predeterminados, posicionales y de palabras clave

 # default arguments print("Hello (), your balance is ().".format("Adam", 230.2346)) # positional arguments print("Hello (0), your balance is (1).".format("Adam", 230.2346)) # keyword arguments print("Hello (name), your balance is (blc).".format(name="Adam", blc=230.2346)) # mixed arguments print("Hello (0), your balance is (blc).".format("Adam", blc=230.2346))

Salida

Hola Adam, tu saldo es 230.2346. Hola Adam, tu saldo es 230.2346. Hola Adam, tu saldo es 230.2346. Hola Adam, tu saldo es 230.2346.

Nota: En el caso de argumentos mixtos, los argumentos de palabras clave siempre deben seguir los argumentos posicionales.

Formateo de números con formato ()

Puede formatear números utilizando el especificador de formato que se proporciona a continuación:

Tipos de formato de números
Tipo Sentido
re Entero decimal
C Carácter Unicode correspondiente
segundo Formato binario
o Formato octal
X Formato hexadecimal (minúsculas)
X Formato hexadecimal (mayúsculas)
norte Igual que 'd'. Excepto que usa la configuración regional actual para el separador de números
mi Notación exponencial. (e minúscula)
mi Notación exponencial (E mayúscula)
F Muestra el número de punto fijo (predeterminado: 6)
F Igual que 'f'. Excepto que muestra 'inf' como 'INF' y 'nan' como 'NAN'
gramo Formato general. Redondea el número ap dígitos significativos. (Precisión predeterminada: 6)
GRAMO Igual que 'g'. Excepto que cambia a 'E' si el número es grande.
% Porcentaje. Multiplica por 100 y pone% al final.

Ejemplo 2: formato de número simple

 # integer arguments print("The number is:(:d)".format(123)) # float arguments print("The float number is:(:f)".format(123.4567898)) # octal, binary and hexadecimal format print("bin: (0:b), oct: (0:o), hex: (0:x)".format(12))

Salida

 El número es: 123 El número es: 123.456790 bin: 1100, oct: 14, hexadecimal: c

Ejemplo 3: formato de número con relleno para int y flotantes

 # integer numbers with minimum width print("(:5d)".format(12)) # width doesn't work for numbers longer than padding print("(:2d)".format(1234)) # padding for float numbers print("(:8.3f)".format(12.2346)) # integer numbers with minimum width filled with zeros print("(:05d)".format(12)) # padding for float numbers filled with zeros print("(:08.3f)".format(12.2346))

Salida

1 2 1 2 3 4 1 2. 2 3 5 0 0 0 1 2 0 0 1 2. 2 3 5

Aquí,

  • en la primera instrucción, (:5d)toma un argumento entero y asigna un ancho mínimo de 5. Dado que no se especifica ninguna alineación, se alinea a la derecha.
  • En la segunda declaración, puede ver que el ancho (2) es menor que el número (1234), por lo que no ocupa ningún espacio a la izquierda, pero tampoco trunca el número.
  • A diferencia de los enteros, los flotantes tienen partes enteras y decimales. Y el ancho mínimo definido para el número es para ambas partes como un todo, incluido "." .
  • En la tercera declaración, (:8.3f)trunca la parte decimal en 3 lugares redondeando los últimos 2 dígitos. Y, el número, ahora 12.235, toma un ancho de 8 en total, dejando 2 lugares a la izquierda.
  • Si desea llenar los lugares restantes con cero, coloque un cero antes de que el especificador de formato lo haga. Funciona tanto para enteros como para flotantes: (:05d)y (:08.3f).

Ejemplo 4: formato de número para números con signo

 # show the + sign print("(:+f) (:+f)".format(12.23, -12.23)) # show the - sign only print("(:-f) (:-f)".format(12.23, -12.23)) # show space for + sign print("(: f) (: f)".format(12.23, -12.23))

Salida

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Formato de número con alineación

Los operadores and =se utilizan para la alineación cuando se les asigna un cierto ancho a los números.

Formato de número con alineación
Tipo Sentido
< Alineado a la izquierda con el espacio restante
^ Centro alineado con el espacio restante
> Alineado a la derecha con el espacio restante
= Fuerza el signo (+) (-) a la posición más a la izquierda

Ejemplo 5: formato de número con alineación a la izquierda, a la derecha y al centro

 # integer numbers with right alignment print("(:5d)".format(12)) # float numbers with center alignment print("(:^10.3f)".format(12.2346)) # integer left alignment filled with zeros print("(:<05d)".format(12)) # float numbers with center alignment print("(:=8.3f)".format(-12.2346))

Salida

1 2 1 2. 2 3 5 1 2 0 0 0 - 1 2. 2 3 5

Nota: La alineación a la izquierda llena de ceros para números enteros puede causar problemas como el tercer ejemplo que devuelve 12000, en lugar de 12.

Formateo de cadenas con formato ()

Como números, la cadena se puede formatear de manera similar con format().

Example 6: String formatting with padding and alignment

 # string padding with left alignment print("(:5)".format("cat")) # string padding with right alignment print("(:>5)".format("cat")) # string padding with center alignment print("(:^5)".format("cat")) # string padding with center alignment # and '*' padding character print("(:*^5)".format("cat"))

Output

 c a t c a t c a t * c a t * 

Example 7: Truncating strings with format()

 # truncating strings to 3 letters print("(:.3)".format("caterpillar")) # truncating strings to 3 letters # and padding print("(:5.3)".format("caterpillar")) # truncating strings to 3 letters, # padding and center alignment print("(:^5.3)".format("caterpillar"))

Output

 c a t c a t c a t 

Formatting class and dictionary members using format()

Python internally uses getattr() for class members in the form ".age". And, it uses __getitem__() lookup for dictionary members in the form "(index)".

Example 8: Formatting class members using format()

 # define Person class class Person: age = 23 name = "Adam" # format age print("(p.name)'s age is: (p.age)".format(p=Person()))

Output

 Adam's age is: 23 

Here, Person object is passed as a keyword argument p.

Inside the template string, Person's name and age are accessed using .name and .age respectively.

Example 9: Formatting dictionary members using format()

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(p(name))'s age is: (p(age))".format(p=person))

Output

 Adam's age is: 23 

Similar to class, person dictionary is passed as a keyword argument p.

Inside the template string, person's name and age are accessed using (name) and (age) respectively.

There's an easier way to format dictionaries in Python using str.format(**mapping).

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(name)'s age is: (age)".format(**person))

** is a format parameter (minimum field width).

Arguments as format codes using format()

You can also pass format codes like precision, alignment, fill character as positional or keyword arguments dynamically.

Example 10: Dynamic formatting using format()

 # dynamic string format template string = "(:(fill)(align)(width))" # passing format codes as arguments print(string.format('cat', fill='*', # dynamic float format template num = "(:(align)(width).(precision)f)" # passing format codes as arguments print(num.format(123.236,>

Output

 * * c a t * * 1 2 3 . 2 4 

Here,

  • In the first example, 'cat' is the positional argument is to be formatted. Likewise, fill='*', align='^' and width=5 are keyword arguments.
  • In the template string, these keyword arguments are not retrieved as normal strings to be printed but as the actual format codes fill, align and width.
    The arguments replaces the corresponding named placeholders and the string 'cat' is formatted accordingly.
  • Likewise, in the second example, 123.236 is the positional argument and, align, width and precision are passed to the template string as format codes.

Extra formatting options with format()

format() also supports type-specific formatting options like datetime's and complex number formatting.

format() internally calls __format__() for datetime, while format() accesses the attributes of the complex number.

You can easily override the __format__() method of any object for custom formatting.

Example 11: Type-specific formatting with format() and overriding __format__() method

 import datetime # datetime formatting date = datetime.datetime.now() print("It's now: (:%Y/%m/%d %H:%M:%S)".format(date)) # complex number formatting complexNumber = 1+2j print("Real part: (0.real) and Imaginary part: (0.imag)".format(complexNumber)) # custom __format__() method class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: (:age)".format(Person()))

Output

 It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 

Here,

  • For datetime:
    Current datetime is passed as a positional argument to the format() method.
    And, internally using __format__() method, format() accesses the year, month, day, hour, minutes and seconds.
  • For complex numbers:
    1+2j is internally converted to a ComplexNumber object.
    Then accessing its attributes real and imag, the number is formatted.
  • Overriding __format__():
    Like datetime, you can override your own __format__() method for custom formatting which returns age when accessed as (:age)

También puede utilizar la funcionalidad de objetos __str__()y __repr__()con notaciones abreviadas utilizando format().

Por ejemplo __format__(), puede anular fácilmente los métodos __str__()y los objetos __repr_().

Ejemplo 12: __str () __ y __repr () __ taquigrafía! R y! S usando format ()

 # __str__() and __repr__() shorthand !r and !s print("Quotes: (0!r), Without Quotes: (0!s)".format("cat")) # __str__() and __repr__() implementation for class class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: (p!r), str: (p!s)".format(p=Person()))

Salida

 Citas: 'cat', Sin comillas: cat repr: REPR, str: STR 

Articulos interesantes...