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.ALLpt.DEFAULTpt.DOUBLE_BORDERpt.FRAMEpt.HEADERpt.MARKDOWNpt.MSWORD_FRIENDLYpt.NONEpt.ORGMODEpt.PLAIN_COLUMNSpt.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_stringt.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_keysi 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 ...