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
f
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}
.
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