≡ Menu

Creazione e Formattazione di Tabelle in Python: Un Confronto tra Tabulate e Texttable

The tabular representation of data is crucial in various domains of programming and data analysis. Whether it’s about creating a report for business analytics or generating tables for scientific papers, having the right tools to facilitate this task can be invaluable. In Python, there are several libraries designed for table creation, among which are tabulate and texttable. This article explores these two libraries, discussing their functionalities, advantages, and disadvantages, with the aim of providing an in-depth understanding through a practical example.


Introduzione

La rappresentazione tabulare dei dati è fondamentale in diversi ambiti della programmazione e dell’analisi dati. Che si tratti di creare un report per un’analisi di business o di generare tabelle per documenti scientifici, avere a disposizione strumenti che facilitino questo compito può essere molto utile. In Python, ci sono diverse librerie per la creazione di tabelle, tra cui tabulate e texttable. Questo articolo esplora queste due librerie, discutendo le loro funzionalità, vantaggi e svantaggi, con l’obiettivo di fornire una comprensione approfondita attraverso un esempio pratico.

Tabulate

La libreria tabulate è estremamente versatile e facile da usare per la creazione di tabelle in Python. Permette di generare tabelle in diversi formati come plain text, HTML e LaTeX. Le funzionalità principali includono l’organizzazione dei dati in un formato leggibile e la possibilità di aggiungere intestazioni e allineamenti.

Funzionamento Base

Il cuore di tabulate è la funzione tabulate, che prende una lista di righe (ogni riga è una lista di colonne) e un set opzionale di intestazioni. Questa funzione può generare una stringa di output che rappresenta una tabella.

from tabulate import tabulate
print(tabulate([['apple', 1], ['banana', 2]], headers=['Fruit', 'Count']))

Questo l’output:

Fruit      Count
-------  -------
apple          1
banana         2

Texttable

Texttable è un’altra libreria di Python utilizzata per creare tabelle semplici ma ben formattate. A differenza di tabulate, texttable offre più controllo sulla formattazione, consentendo all’utente di impostare l’allineamento, la larghezza delle colonne e altre opzioni a livello di cella.

Funzionamento Base

Si può iniziare con un oggetto Texttable vuoto e aggiungere righe e colonne utilizzando i metodi add_rows e set_cols_align, tra gli altri.

from texttable import Texttable
t = Texttable()
t.add_rows([['Name', 'Age'], ['Alice', 24], ['Bob', 22]])
print(t.draw())

In questo caso, otteniamo:

+-------+-----+
| Name  | Age |
+=======+=====+
| Alice | 24  |
+-------+-----+
| Bob   | 22  |
+-------+-----+

Esempio Pratico: Confronto tra Razzi

Per dimostrare le funzionalità di queste due librerie, consideriamo un esempio che confronta diversi tipi di razzi spaziali.

Codice Originale

from tabulate import tabulate
from texttable import Texttable
import latextable

rows = [['Rocket', 'Organisation', 'LEO Payload (Tonnes)', 'Maiden Flight'],
        ['Saturn V', 'NASA', '140', '1967'],
        ['Space Shuttle', 'NASA', '24.4', '1981'],
        ['Falcon 9 FT-Expended', 'SpaceX', '22.8', '2017'],
        ['Ariane 5 ECA', 'ESA', '21', '2002']]

# Creazione di una tabella con Texttable
table = Texttable()
table.set_cols_align(["c"] * 4)
table.set_deco(Texttable.HEADER | Texttable.VLINES)
table.add_rows(rows)

# Output delle tabelle
print('Tabulate Table:')
print(tabulate(rows, headers='firstrow'))

print('\nTexttable Table:')
print(table.draw())

print('\nTabulate Latex:')
print(tabulate(rows, headers='firstrow', tablefmt='latex'))

print('\nTexttable Latex:')
print(latextable.draw_latex(table, caption="A comparison of rocket features."))

Nel seguito, mostriamo l’output del codice:

Tabulate Table:
Rocket                Organisation      LEO Payload (Tonnes)    Maiden Flight
--------------------  --------------  ----------------------  ---------------
Saturn V              NASA                             140               1967
Space Shuttle         NASA                              24.4             1981
Falcon 9 FT-Expended  SpaceX                            22.8             2017
Ariane 5 ECA          ESA                               21               2002

Texttable Table:
       Rocket        | Organisation | LEO Payload (Tonnes) | Maiden Flight
=====================+==============+======================+==============
      Saturn V       |     NASA     |         140          |     1967     
   Space Shuttle     |     NASA     |        24.400        |     1981     
Falcon 9 FT-Expended |    SpaceX    |        22.800        |     2017     
    Ariane 5 ECA     |     ESA      |          21          |     2002     

Tabulate Latex:
\begin{tabular}{llrr}
\hline
 Rocket               & Organisation   &   LEO Payload (Tonnes) &   Maiden Flight \\
\hline
 Saturn V             & NASA           &                  140   &            1967 \\
 Space Shuttle        & NASA           &                   24.4 &            1981 \\
 Falcon 9 FT-Expended & SpaceX         &                   22.8 &            2017 \\
 Ariane 5 ECA         & ESA            &                   21   &            2002 \\
\hline
\end{tabular}

Texttable Latex:
\begin{table}
        \begin{center}
                \begin{tabular}{c|c|c|c}
                        Rocket & Organisation & LEO Payload (Tonnes) & Maiden Flight \\
                        \hline
                        Saturn V & NASA & 140 & 1967 \\
                        Space Shuttle & NASA & 24.400 & 1981 \\
                        Falcon 9 FT-Expended & SpaceX & 22.800 & 2017 \\
                        Ariane 5 ECA & ESA & 21 & 2002 \\
                \end{tabular}
        \end{center}
        \caption{A comparison of rocket features.}
\end{table}

Il codice LaTeX fornito, compilato, produce la seguente tabella:

Dettagli del Codice

  1. Import delle librerie: Importiamo tutte le librerie necessarie (tabulate, texttable, latextable).
  2. Preparazione dei dati: Prepariamo una lista di liste (rows) che contiene le informazioni sui razzi.
  3. Creazione della tabella con Texttable: Creiamo un oggetto Texttable e impostiamo l’allineamento e il decoratore. Poi, aggiungiamo le righe con add_rows.
  4. Output delle tabelle: Utilizziamo le funzioni tabulate e Texttable.draw() per generare e stampare le tabelle. Inoltre, generiamo le versioni LaTeX delle tabelle.

Questo esempio mostra come sia tabulate che texttable possano essere utilizzati efficacemente per formattare dati tabulari. Tuttavia, la scelta tra i due dipenderà dalle specifiche esigenze dell’utente, come il livello di personalizzazione richiesto o i formati di output necessari.


The Python ecosystem offers a multitude of libraries for various tasks, but when it comes to creating beautiful command-line interfaces (CLIs) with rich text support, one library stands out—rich. Unlike simple text formatting libraries, rich not only allows you to add styles and colors to your text but also supports rendering tables, markdown, syntax-highlighted code, and much more.

Here, we’ll focus on the Table feature offered by rich, which allows you to create well-formatted tables with ease.

Rich Tables

Setup

Before running the code, make sure you’ve installed the rich library. You can install it using pip:

pip install rich

Code Example

Here is a simple example to showcase how to create a table using rich.

from rich.console import Console
from rich.table import Table

# Initialize the Console object from rich
console = Console()

# Create a Table object, set its properties
table = Table(show_header=True, header_style="bold magenta")
table.add_column("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")

# Add rows to the table
table.add_row(
    "Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
    "May 25, 2018",
    "[red]Solo[/red]: A Star Wars Story",
    "$275,000,000",
    "$393,151,347",
)
table.add_row(
    "Dec 15, 2017",
    "Star Wars Ep. VIII: The Last Jedi",
    "$262,000,000",
    "[bold]$1,332,539,889[/bold]",
)

# Render the table on the console
console.print(table)

Code Explanation

  1. Import Modules: We import Console and Table from rich. from rich.console import Console from rich.table import Table
  2. Initialize Console: console = Console() initializes a console object that we can use to print our table.
  3. Create Table: We create a Table object and specify some of its properties, like whether to show the header (show_header=True) and what style to use for the header (header_style="bold magenta").
  4. Add Columns: table.add_column() is used to add columns to the table. You can also specify attributes like the style and width for each column.
  5. Add Rows: We add rows using table.add_row(). The order of the data should match the columns’ order. Rich text formatting can also be applied here.
  6. Render Table: Finally, we print the table on the console using console.print(table).

rich offers a wide variety of customization options, making it one of the go-to libraries for creating visually appealing CLIs and tables.

{ 0 comments… add one }

Rispondi