Il modulo PrettyTable permette di manipolare tabelle di dati e in particolare di visualizzarle con tanto di cornice!
Per usare il modulo, prima devi installarlo con
pip install prettytable
Poi crea una tabella da manipolare
import prettytable as pt
...
t=pt.PrettyTable()
...
Costanti
pt.ALL
pt.DEFAULT
pt.DOUBLE_BORDER
pt.FRAME
pt.HEADER
pt.MARKDOWN
pt.MSWORD_FRIENDLY
pt.NONE
pt.ORGMODE
pt.PLAIN_COLUMNS
pt.SINGLE_BORDER
Attributi
t.align=...
t.border=...
t.field_names=...
t.float_format=...
t.header=...
- …
Funzioni predefinite
print(t)
- …
Funzioni
pt.from_csv()
- …
Metodi
t.add_column(...)
t.add_row(...)
t.add_rows(...)
t.clear()
t.clear_rows()
t.copy()
t.del_column(...)
t.del_row(...)
t.get_string(...)
t.get_html_string(...)
t.get_json_string
t.set_style(...)
- …
Stili predefiniti
Il metodo set_style()
permette di scegliere uno stile predefinito per la cornice della tabella
DEFAULT
, utilizza i caratteri più, meno e pipeDOUBLE_BORDER
, bordo doppioMARKDOWN
, sintassi MarkdownMSWORD_FRIENDLY
, utilizza solo il carattere pipe (simile a MS Word?)ORGMODE
, sintassi Org modePLAIN_COLUMNS
, senza bordoSINGLE_BORDER
, bordo singolo
t.set_style(pt.DOUBLE_BORDER)
Attributi di stile
Si imposta il singolo attributo della tabella dopo averla creata
...
t=pt.PrettyTable()
t.header=False
...
oppure si assegna un valore agli attributi quando si richiama il costruttore
t=pt.PrettyTable(header=False, ...)
oppure si interviene sulla singola tabella appena prima di stamparla, passando per il metodo get_string()
print(t.get_string(header=False, ...))
Sono disponibili attributi per impostare ogni singolo aspetto della tabella
Visibilità
t.border
, cornice visibile, sì o no? (True / False)t.header
, intestazioni visibili, sì o no? (True / False)- …
Allineamenti
t.align
, allineamento a sinistra / centro / destra (“l” / “c” / “r“)t.align["nome"]
, allineamento del campo specificato a sinistra / centro / destra (“l” / “c” / “r“)t.header_align
, allineamento delle intestazioni a sinistra / centro / destra (“l” / “c” / “r“)t.header_align["nome"]
, allineamento dell’intestazione con nome a sinistra / centro / destra (“l” / “c” / “r“)t.valign
, allineamento verticale in alto / al centro / in basso (“t” / “m” / “b“)t.valign["nome"]
, allineamento verticale del campo specificato in alto / al centro / in basso (“t” / “m” / “b“)
Caratteri
t.horizontal_char
, …t.vertical_char
, …- …
Formattazione numeri
t.float_format
, accetta una stringa di formattazione, come print()t.int_format
, accetta una stringa di formattazione, come print()
Ordinamento
t.reversesort
, ordinamento decrescente (True / False)t.sortby
, la tabella verrà mantenuta ordinata rispetto al campo specificato
Consort_key
si può specificare un criterio (funzione) di ordinamento…t.sortby=None
, annulla l’ordinamento
Inserire i dati
Dopo aver specificato i nomi dei campi, con una lista di stringhe
t.field_names=[ "nome1", "nome2", ... ]
si può inserire una riga, con una lista di valori
t.add_row([ valore1, valore2, ... ])
oppure tante righe, con una lista di liste di valori
t.add_rows( [ [ valore11, valore12, ... ], [ valore21, valore22, ... ], ... ] )
Si può inserire una colonna dopo l’altra (con nome del campo e lista dei valori)
t.add_column( "nome1", [ valore11, valore21, ... ] ) t.add_column( "nome2", [ valore12, valore22, ... ] ) ...
CSV
La funzione del modulo from_csv()
legge i dati di un file CSV e crea la tabella
import prettytable as pt with open("nomefile.csv") as f: t = pt.from_csv(f) print(t)
Database
Se i dati sono in un database accessibile secondo il protocollo Python DB-API allora si usa la funzione from_db_cursor()
Eliminare i dati
t.del_row(...)
, elimina la riga di indice nt.del_column(...)
, elimina la colonna con “nome”t.clear_rows()
, elimina tutte le righe ma rimane la riga di intestazionet.clear()
, elimina tutto ma rimangono le impostazioni già fatte
Esportare i dati
Il metodo t.get_string()
restituisce la tabella nel formato con cui verrebbe stampata da print()
t2=t1.get_string()
Il metodo t.copy()
restituisce una copia completa e indipendente della tabella
t2=t1.copy(t1)
Con la tecnica dello slicing si può creare una nuova tabella con le righe a piacere
t2=t1[...] # START, STOP, STEP...
I formati più diffusi del web?
t2=t1.get_html_string() # Codice HTML, con tutti i tag necessari # Accetta molte manipolazioni... t2=t1.get_json_string() # Formato JSON
Selezionare i dati
Il metodo t.get_string()
accetta degli argomenti con nome che permettono di selezionare o manipolare i dati nella tabella
fields=...
, una lista con i nomi dei campisortby=...
, il nome del camposortby=...
, il nome del campostart=...
, l’indice della riga di partenzaend=...
, l’indice della riga esclusa
print(t.get_string(fields=["nome1", "nome2", ...])) # Solo le colonne specificate print(t.get_string(sortby="nome_campo")) # In ordine crescente rispetto al campo ... print(t.get_string(sortby="nome_campo", reversesort=True)) # In ordine decrescente rispetto al campo ... print(t.get_string(start=indice)) # A partire dalla riga ... print(t.get_string(end=indice)) # Fino alla riga prima di ... print(t.get_string(start=indice1, end=indice2)) # A partire dalla riga ... fino alla riga prima di ...