Ahora que has aprendido diferentes técnicas de alineación, apliquemos estas para crear tablas bien formateadas. Las tablas son una forma común de mostrar datos estructurados en un formato legible, y una alineación adecuada es crucial para presentar la información tabular de manera efectiva.
Tabla Simple con Columnas de Ancho Fijo
Empecemos creando una tabla simple con columnas de ancho fijo.
- Crea un nuevo archivo llamado
simple_table.py en el directorio /home/labex/project:
## simple_table.py
print("Tabla Simple de Ancho Fijo")
print("-" * 50)
## Define algunos datos
encabezado = ["Nombre", "Edad", "Ciudad", "Profesión"]
datos = [
["John Smith", 34, "Nueva York", "Médico"],
["Sarah Johnson", 28, "San Francisco", "Ingeniera"],
["Michael Brown", 42, "Chicago", "Maestro"],
["Emily Davis", 31, "Boston", "Científica"]
]
## Imprime el encabezado
print(f"{encabezado[0]:<20} {encabezado[1]:<8} {encabezado[2]:<15} {encabezado[3]:<15}")
print("-" * 60)
## Imprime las filas
for fila in datos:
print(f"{fila[0]:<20} {fila[1]:<8} {fila[2]:<15} {fila[3]:<15}")
- Guarda el archivo y ejecútalo:
python3 ~/project/simple_table.py
- Deberías ver una tabla formateada como esta:
Tabla Simple de Ancho Fijo
--------------------------------------------------
Nombre Edad Ciudad Profesión
------------------------------------------------------------
John Smith 34 Nueva York Médico
Sarah Johnson 28 San Francisco Ingeniera
Michael Brown 42 Chicago Maestro
Emily Davis 31 Boston Científica
Tabla Dinámica con Múltiples Tipos de Alineación
Diferentes tipos de datos a menudo se ven mejor con diferentes estilos de alineación. Por ejemplo, el texto suele alinearse a la izquierda, mientras que los números se alinean a la derecha. Creemos una tabla más sofisticada con alineación mixta.
- Crea un nuevo archivo llamado
dynamic_table.py en el directorio /home/labex/project:
## dynamic_table.py
print("Tabla Dinámica con Alineación Mixta")
print("-" * 50)
## Define algunos datos
encabezado = ["Producto", "Precio", "Cantidad", "Total"]
productos = [
["Portátil", 1299.99, 3, 3899.97],
["Ratón", 24.50, 10, 245.00],
["Monitor", 349.95, 2, 699.90],
["Teclado", 49.99, 5, 249.95],
["Auriculares", 89.95, 4, 359.80]
]
## Calcula los anchos de columna basados en el contenido
anchos_columnas = [
max(len(str(encabezado[0])), max(len(str(fila[0])) for fila in productos)) + 2,
max(len(str(encabezado[1])), max(len(f"${fila[1]:.2f}") for fila in productos)) + 2,
max(len(str(encabezado[2])), max(len(str(fila[2])) for fila in productos)) + 2,
max(len(str(encabezado[3])), max(len(f"${fila[3]:.2f}") for fila in productos)) + 2
]
## Imprime el encabezado
print(f"{encabezado[0]:<{anchos_columnas[0]}}"
f"{encabezado[1]:>{anchos_columnas[1]}}"
f"{encabezado[2]:>{anchos_columnas[2]}}"
f"{encabezado[3]:>{anchos_columnas[3]}}")
print("-" * sum(anchos_columnas))
## Imprime las filas con la alineación apropiada
for producto in productos:
print(f"{producto[0]:<{anchos_columnas[0]}}",
f"${producto[1]:.2f}".rjust(anchos_columnas[1]),
f"{producto[2]}".rjust(anchos_columnas[2]),
f"${producto[3]:.2f}".rjust(anchos_columnas[3]))
## Imprime el resumen
cantidad_total = sum(producto[2] for producto in productos)
coste_total = sum(producto[3] for producto in productos)
print("-" * sum(anchos_columnas))
print(f"{'TOTAL':<{anchos_columnas[0]}}",
f"".rjust(anchos_columnas[1]),
f"{cantidad_total}".rjust(anchos_columnas[2]),
f"${coste_total:.2f}".rjust(anchos_columnas[3]))
... (resto del código traducido)