Cadenas de relleno en Python

En este artículo, echamos un vistazo a los tipos de relleno que existen y ejemplos de cómo agregarlo de manera eficiente en Python usando ljust(), center(), rjust(), zfill() y format().

Introducción

El relleno de cadenas se refiere a agregar, generalmente, caracteres no informativos a una cadena en uno o ambos extremos de la misma. Esto se hace con mayor frecuencia para formatear y alinear la salida, pero puede tener aplicaciones prácticas útiles.

Un caso de uso frecuente para las cadenas de relleno es la salida de información similar a una tabla de forma similar a una tabla. Puede hacer esto de varias maneras, incluido el uso de Pandas para convertir sus datos en una tabla real. De esta forma, Python manejaría el formato de salida por sí solo.

En este artículo, cubriremos cómo rellenar cadenas en Python.

Diga, tenemos estas tres listas:

1
2
3
medicine1 = ['Morning', 'dispirine', '1 mg']
medicine2 = ['Noon', 'arinic', '2 mg']
medicine3 = ['Evening', 'Long_capsule_name', '32 mg']

Podemos convertirlos en una cadena, usando la función join():

1
2
3
print(str.join(' ', medicine1))
print(str.join(' ', medicine2))
print(str.join(' ', medicine3))

Nos daría la salida bastante desordenada de:

1
2
3
Morning Dispirine 1 mg
Noon Arinic 2 mg
Evening Long_capsule_name 32 mg

Para combatir esto, podríamos escribir bucles for/while y agregar espacios a las cadenas hasta que alcanzaran una cierta longitud, y asegurarnos de que todos los datos estén alineados correctamente para facilitar la inspección visual. O bien, podríamos usar funciones integradas que pueden lograr el mismo objetivo.

Las funciones que veremos en este artículo son: solo(), centro(), ajustar(), zfill() y formato(). Cualquiera de estas funciones se puede usar para agregar una cierta cantidad de caracteres a cualquier extremo de las cadenas, incluidos los espacios.

Tipos de relleno

Antes de echar un vistazo más de cerca a las funciones mencionadas anteriormente, echaremos un vistazo a los diferentes tipos de relleno para que podamos hacer referencia a ellos cuando hablemos de las funciones.

Relleno izquierdo

Agregar relleno izquierdo a una cadena significa agregar un carácter dado al comienzo de una cadena para que tenga la longitud especificada. El relleno a la izquierda, fuera de las razones simples de formato y alineación, puede ser realmente útil cuando se nombran archivos que comienzan con un número generado en una secuencia.

Por ejemplo, necesita nombrar 11 archivos, y cada uno de ellos comienza con un número del 1 al 11. Si simplemente agregara el número al principio del archivo, la mayoría de los sistemas operativos ordenarían los archivos en el siguiente orden: `1 ‘, ‘10’, ‘11’, ‘2’, etc.

Esto sucede, por supuesto, debido a las reglas de clasificación lexicográfica, pero puede evitar estas situaciones nombrando archivos con uno o más ceros a la izquierda, dependiendo de cuántos archivos espera, es decir: 01, 02, 03\ …

Esto se puede lograr rellenando a la izquierda los números con el número apropiado de ceros, lo que mantiene su valor original.

Esto da el efecto de cadenas justificadas a la izquierda.

Relleno central

Esto significa que el carácter dado se agrega en igual medida a ambos lados de la cadena hasta que la nueva cadena alcance la longitud indicada. Usar esto centra efectivamente la cadena en la longitud proporcionada:

Esta es una cadena normal.

Esta es una cuerda central acolchada.

Relleno derecho

El relleno derecho es análogo al relleno izquierdo: el carácter dado se agrega al final de la cadena hasta que la cadena alcanza una cierta longitud.

Funciones de Python para el relleno de cadenas

Python ofrece muchas funciones para formatear y manejar cadenas, su uso depende del caso de uso y la preferencia personal del desarrollador. La mayoría de las funciones de las que hablaremos se ocupan del texto justificación, que esencialmente agrega relleno a un lado de la cadena. Por ejemplo, para que una cadena esté justificada a la izquierda, debemos agregar relleno al final (lado derecho) de la cadena.

Nota: En todas las funciones que esperan un parámetro width o len, en caso de que la cadena original sea más larga que el width o len especificado, la cadena completa se mantendrá sin cambios. Esto puede tener el efecto no deseado de que las cadenas largas arruinen el formato, por lo que al elegir un valor de “ancho”, asegúrese de incluir la cadena más larga en una cuenta o en un límite de longitud superior.

luz()

La función ljust() alinea una cadena a la izquierda agregando el relleno derecho.

La función ljust() toma dos parámetros: width y fillchar. El ‘ancho’ es obligatorio y especifica la longitud de la cadena después de agregar el relleno, mientras que el segundo parámetro es opcional y representa el carácter agregado al relleno de la cadena original.

El valor predeterminado es un carácter espacio, es decir, ' '. Esta es una opción particularmente buena para usar cuando se imprimen datos en forma de tabla, como en nuestro ejemplo al principio:

1
2
3
4
5
6
7
8
medicine1 = ['Morning', 'Dispirine', '1 mg']
medicine2 = ['Noon', 'Arinic', '2 mg']
medicine3 = ['Evening', 'Long_capsule_name', '32 mg']

for medicine in [medicine1, medicine2, medicine3]:
    for entry in medicine:
        print(entry.ljust(25), end='')
    print()

Lo que nos da la salida:

1
2
3
Morning                  Dispirine                1 mg                     
Noon                     Arinic                   2 mg                     
Evening                  Long_capsule_name        32 mg 

centro()

La función center() alinea una cadena en el centro del ancho especificado, agregando relleno por igual a ambos lados. Los parámetros son los mismos que con la función ljust(), un ancho obligatorio y un parámetro fillchar opcional:

1
2
3
4
list_of_strings = ["This can give us", "text that's center aligned", "within the specified width"]

for s in list_of_strings:
    print(s.center(50, ' '))

Producción:

1
2
3
                 This can give us                 
            text that's center aligned            
            within the specified width            

rjust()

De manera análoga a las dos funciones anteriores, rjust() alinea la cadena a la derecha agregando relleno a la izquierda (comienzo) de la cadena.

Una vez más, los parámetros son el ancho requerido y el fillchar opcional. Como mencionamos anteriormente, esta función es muy útil cuando se nombran archivos que comienzan con números debido a la clasificación más intuitiva:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
list_of_names_original = []
list_of_names_padded = []

for n in range(1, 13):
    list_of_names_original.append(str(n) + "_name")
    list_of_names_padded.append(str(n).rjust(2, '0') + "_name")

print("Lexicographical sorting without padding:")
print(sorted(list_of_names_original))
print()

print("Lexicographical sorting with padding:")
print(sorted(list_of_names_padded))

Ejecutar este código nos daría:

1
2
3
4
5
Lexicographical sorting without padding:
['10_name', '11_name', '12_name', '1_name', '2_name', '3_name', '4_name', '5_name', '6_name', '7_name', '8_name', '9_name']

Lexicographical sorting with padding:
['01_name', '02_name', '03_name', '04_name', '05_name', '06_name', '07_name', '08_name', '09_name', '10_name', '11_name', '12_name']

zfill()

La función zfill() funciona de manera muy similar a usar rjust() con cero como el carácter especificado. Dejó rellena la cadena dada con ceros hasta que la cadena alcance la longitud especificada.

La única diferencia es que en caso de que nuestra cadena comience con un signo más(+) o menos(-), el relleno comenzará después de ese signo:

1
2
3
4
5
6
7
8
neutral = '15'
positive = '+15'
negative = '-15'
length = 4

print(neutral.zfill(length))
print(positive.zfill(length+1))
print(negative.zfill(length+1))

Esto se hace para mantener el valor original del número en caso de que la cadena fuera un número. Ejecutar este código nos daría:

1
2
3
0015
+0015
-0015

formato()

La función format() es la más avanzada de la lista. Esta única función se puede utilizar para el relleno izquierdo, derecho e incluso central. También se usa para otro formato, pero solo veremos la funcionalidad de relleno que proporciona.

Devuelve la cadena después de formatear los valores especificados y colocarlos dentro de los marcadores de posición de cadena definidos por {}.

Los marcadores de posición se pueden identificar mediante índices con nombre, índices numerados o incluso corchetes vacíos. Un ejemplo rápido de cómo se ven estos marcadores de posición antes de ver cómo podemos usar esta función para agregar relleno:

1
2
print("Placeholders can given by {0}, or with {value}".format("adding a number", value="a named value"))
print("They can also be given {}, without adding a {} or {}".format("implicitly", "number", "name"))

Lo que nos daría:

1
2
Placeholders can given by adding a number, or with a named value
They can also be given implicitly, without adding a number or name

Estos marcadores de posición aceptan una variedad de opciones de formato. Veamos cómo podemos lograr diferentes tipos de relleno de cadenas usando estas opciones:

  • Relleno izquierdo: Use > dentro del marcador de posición y un número para especificar el ancho deseado, para alinear a la derecha una cadena (agregar caracteres al principio):

    1
    2
    
    txt = "We {:>8} Python."
    print(txt.format('love'))
    

    Which gives us:

    1
    
    We     love Python.
    
  • Relleno central: De manera similar, podemos usar ^ para relleno/alineación central:

    1
    2
    
    txt = "We {:^8} Python."
    print(txt.format('love')) 
    
    1
    
    We   love   Python.
    
  • Relleno derecho: Use < dentro de los marcadores de posición para alinear a la izquierda una cadena:

    1
    2
    
    txt = "We {:<8} Python."
    print(txt.format('love')) 
    
    1
    
    We love     Python.
    

También puede agregar caracteres que no sean espacios en blanco, agregando los caracteres especificados antes del carácter >, ^ o <:

1
print('{:*^50}'.format('Center padding with a specific character'))
1
*****Center padding with a specific character*****

Puedes leer más sobre las diferentes posibilidades de la función format() en nuestra Guía para dar formato a cadenas con Python.

Conclusión

Agregar relleno a las cadenas en Python es un proceso relativamente sencillo, que puede aumentar notablemente la legibilidad de su salida, especialmente si los datos que tiene se pueden leer en forma de tabla.

En este artículo, hemos cubierto las funciones ljust(), rjust(), center(), zfill() y format() como enfoques integrados para el relleno de cadenas en Python .

Licensed under CC BY-NC-SA 4.0