Curso
El formateo de cadenas también se conoce como interpolación de cadenas. Es el proceso de insertar una cadena o variable personalizada en un texto predefinido.
custom_string = "String formatting"
print(f"{custom_string} is a powerful technique")
String formatting is a powerful technique
Como científico de datos, lo utilizarías para insertar un título en un gráfico, mostrar un mensaje o un error, o pasar una declaración a una función.
Métodos para dar formato
- Formato posicional
- Literales de cadena formateados
- Método de plantilla
Método String.Format
Ponemos marcadores de posición definidos por un par de llaves en un texto. Llamamos al método de formato punto cadena. A continuación, pasamos el valor deseado al método. El método sustituye los marcadores de posición utilizando los valores en el orden de aparición sustituir por valor:
'text{}'.format(value)
Formato posicional
Definimos una cadena e insertamos dos marcadores de posición. Pasamos dos cadenas al método, que se pasarán para obtener la siguiente salida:
print("Machine learning provides {} the ability to learn {}".format("systems", "automatically"))
Machine learning provides systems the ability to learn automatically
Podemos utilizar variables tanto para la cadena como para los valores pasados al método. En el siguiente código de ejemplo, definimos una cadena con marcadores de posición y otras dos variables. Aplicamos el método de formato a la cadena utilizando las dos variables definidas. El método lee la cadena y sustituye los marcadores de posición por los valores dados.
my_string = "{} rely on {} datasets"
method = "Supervised algorithms"
condition = "labeled"
print(my_string.format(method, condition))
Supervised algorithms rely on labeled datasets
Reordenar valores
En el ejemplo siguiente, añades números de índice en los marcadores de posición para reordenar los valores. Esto afecta al orden en que el método sustituye los marcadores de posición.
El método los sustituye por los valores en el orden dado.
print("{} has a friend called {} and a sister called {}". format("Betty", "Linda", "Daisy"))
Betty has a friend called Linda and a sister called Daisy
Si añadimos los números índice, el orden de sustitución cambia en consecuencia.
print("{2} has a friend called {0} and a sister called {1}". format("Betty", "Linda", "Daisy"))
Daisy has a friend called Betty and a sister called Linda
Marcadores de posición de nombre
También podemos introducir argumentos de palabra clave que se llamen por su nombre de palabra clave.
En el código de ejemplo siguiente, hemos insertado palabras clave en los marcadores de posición. A continuación, llamamos a estas palabras clave en el método de formato. A continuación, asignamos qué variable se pasará para cada una de ellas, lo que da como resultado la siguiente salida.
tool="Unsupervised algorithms"
goal="patterns"
print("{title} try to find {aim} in the dataset".format(title=tool, aim=goal))
Unsupervised algorithms try to find patterns in the dataset
Examinemos este código a continuación. Hemos definido un diccionario con las claves: herramienta y objetivo.
my_methods = {"tool": "Unsupervised algorithms", "goal": "patterns"}
Queremos insertar sus valores en una cadena. Dentro de los marcadores de posición, podemos especificar el valor asociado a la herramienta clave de los datos variables utilizando la notación de corchetes. Los datos son el diccionario especificado en el método, y la herramienta es la clave presente en ese diccionario.
print('{data[tool]} try to find {data[goal]} in the dataset'.format(data=my_methods))
Así, obtenemos la salida deseada que se muestra a continuación. ¡Ten cuidado! Tienes que especificar el índice sin utilizar las comillas.
Unsupervised algorithms try to find patterns in the dataset
Especificador de formato
También podemos especificar el formato dentro de llaves. Define cómo se presentan los valores individuales. Aquí utilizaremos el especificador sintáctico índice dos puntos. Uno de los especificadores de formato más comunes es el flotante representado por f. En el código, especificamos que el valor pasado con el índice 0 será un valor flotante.
print("Only {0:f}% of the {1} produced worldwide is {2}!". format(0.5155675, "data", "analyzed"))
Only 0.515567% of the data produced worldwide is analyzed!
También podríamos añadir .2f indicando que queremos que el valor flotante tenga dos decimales, como se ve en la salida resultante.
print("Only {0:.2f}% of the {1} produced worldwide is {2}!".format(0.5155675, "data", "analyzed"))
Only 0.52% of the data produced worldwide is analyzed!
Formateo datetime
Python tiene un módulo llamado datetime que nos permite, por ejemplo, obtener la hora y la fecha de hoy.
from datetime import datetime
print(datetime.now())
2020-08-08 06:28:42.715243
Pero como el formato devuelto es muy particular, ¡podrías utilizar el especificador de formato como %y-%m-%d-%h-%m para ajustar el formato a algo más familiar para nosotros!
print("Today's date is {:%Y-%m-%d %H:%M}".format(datetime.now()))
Today's date is 2020-08-08 06:29
Ejemplo interactivo
En el siguiente ejemplo, asignarás las subcadenas que van del 4.º al 19.º carácter, y del 22.º al 44.º carácter de wikipedia_article a las variables first_pos y second_pos, respectivamente. Ajusta las cadenas para que estén en minúsculas. Por último, imprime las variables first_pos y second_pos.
# Assign the substrings to the variables
first_pos = wikipedia_article[3:19].lower()
second_pos = wikipedia_article[21:44].lower()
Cuando ejecutamos el código anterior, se obtiene el siguiente resultado:
computer science
artificial intelligence
Para saber más sobre el formato posicional, consulta este vídeo de nuestro curso Expresiones regulares en Python.
Este contenido ha sido extraído del curso Expresiones regulares en Python de DataCamp, impartido por Maria Eugenia Inzaugarat.
Consulta nuestro tutorial de Python sobre cadenas.