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
fEl 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