Python: Mostrar información (print, format)

Para mostrar información básica podemos usar print:

In [1]: ip1 = "192.168.1.1"

In [2]: ip2 = "10.0.1.2"

In [3]: print(ip1, ip2)
192.168.1.1 10.0.1.2

In [4]: print("ip1 = ", ip1, "ip2 = ", ip2)
ip1 =  192.168.1.1 ip2 =  10.0.1.2

Podemos repetir una cadena o carácter:

In [1]: print("-" * 10)
----------

In [2]: print(".·-=-·." * 10)
.·-=-·..·-=-·..·-=-·..·-=-·..·-=-·..·-=-·..·-=-·..·-=-·..·-=-·..·-=-·.

Para crear una salida de texto más compleja y potente podemos usar el método .format, teniendo como base:

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Cada pareja de {} será sustituida por una variable en orden de izquierda a derecha:

In [1]: ip1 = "192.168.1.1"

In [2]: mask = "255.255.255.0"

In [3]: print("ip {}/{}".format(ip1, mask))
ip 192.168.1.1/255.255.255.0

Podemos dar formato de forma independiente cada pareja de {}, con :x indicamos el ancho, con >, ^, < indicamos la justificación del texto:

In [1]: txt1 = "izquierda"

In [2]: txt2 = "centrado"

In [3]: txt3 = "derecha"

In [4]: print("||{:<15}||{:^15}||{:>15}||".format(txt1, txt2, txt3))
||izquierda      ||   centrado    ||        derecha||

También podemos indicar el orden de las variables a base de alias, incluso repetir una variable sin tener que indicarla en la lista, solo usando el alias:

In [1]: txt1 = "izquierda"

In [2]: txt2 = "centrado"

In [3]: txt3 = "derecha"

In [4]: print("||{t2:<15}||{t3:^15}||{t1:>15}||".format(t1=txt1, t2=txt2, t3=txt3))
||centrado       ||    derecha    ||      izquierda||

In [5]: print("||{t2:<15}||{t3:^15}||{t1:>15}||{t2:<15}||".format(t1=txt1, t2=txt2, t3=txt3))
||centrado       ||    derecha    ||      izquierda||centrado       ||

Podemos truncar cadena de forma fácil:

In [1]: txt = "izquierda"

In [2]: print("{:.4}".format(txt))
izqu

Para imprimir una lista o tupla, podemos indicar cada uno de sus elementos o indicar mediante un * que use cada elemento de la lista o tupla.

In [1]: ip = "192.168.1.1"

In [2]: partes = ip.split('.')

In [3]: print("{:4}{:4}{:4}{:4}".format(partes[0], partes[1], partes[2], partes[3]))
192 168 1   1

In [4]: print("{:4}{:4}{:4}{:4}".format(*partes))
192 168 1   1

In [5]: print("{:4}{:4}{:4}".format(*partes))
192 168 1

Algo muy interesante es representar un número en diferentes bases númericas.

In [12]: print("  NUM   HEX   DEC   BIN")
         for num in range(0,16):
             for base in 'dXob':
                 if base == "b":
                     relleno = "0"
                 else:
                     relleno = ""
                 print('{0:{relleno}{ancho}{base}}'.format(num, base=base, ancho=ancho, relleno=relleno), end=' ')
             print()
        
  NUM   HEX   DEC   BIN
    0     0     0 00000
    1     1     1 00001
    2     2     2 00010
    3     3     3 00011
    4     4     4 00100
    5     5     5 00101
    6     6     6 00110
    7     7     7 00111
    8     8    10 01000
    9     9    11 01001
   10     A    12 01010
   11     B    13 01011
   12     C    14 01100
   13     D    15 01101
   14     E    16 01110
   15     F    17 01111

El nuevo formato de cadena llamada f podemos indicar la variable directamente entre {} manteniendo toda la potencia del formateo indicando las opciones detrás de la variable {variable:formato}.

Importante
El formato f solo está soportado desde Python 3.6 o superior.

In [1]: ip = "192.168.1.1"

In [2]: cidr = "24"

In [3]: print(f"IP privada : {ip:>15} / {cidr}")
IP privada:     192.168.1.1 / 24

Más información en: formato de cadenas, formato y plantillas

Retro

Lugares

Redes

Sistemas

Varios