Gdy piszę różnego rodzaju skrypty w języku Python nie raz spotkam się z koniecznością wyświetlenia informacji na konsoli. Zazwyczaj wykorzystuję do tego systemową funkcję print()
, lub bibliotekę pprint. Duża ilość informacji najlepiej zaprezentować w formie tabelarycznej. W repozytorium PiPy znajduje wiele bibliotek obsługujących tabele w ASCII pozwalających na wyświetlanie sformatowanych danych na tekstowej konsoli terminala systemu operacyjnego. Zaprezentuję Ci teraz moją ulubioną, bardzo prostą w użyciu bibliotekę PTable, która jest klonem popularnej biblioteki prettytable.
Instalacja prettytable
Biblioteki prettytable używam przede wszystkim ze względu na jej prostotę oraz intuicyjny sposób operowania danymi wyświetlanymi w tabeli. Prostota ta wyraża się zarówno w intuicyjnym podejściu do umieszczania danych w tabeli do wyświetlenia, jak i przygotowaniu samych danych.
Jak już wspomniałem biblioteka PTable powstała jako rozgałęzienie (fork) biblioteki prettytable, która nie jest od wielu lat już rozwijana. Mocną stroną projektów open-source jest to, że gdy projekt przestaje być rozwijany to zawsze może znaleźć się grupa ochotników, która przejmie prace nad nim. Tu właśnie mieliśmy do czynienia z taką sytuacją, że znalazła się grupa osób chętna do dalszego rozwoju biblioteki. Stworzyli więc jej klon i dalej rozwijali pod nową nazwą. Jeżeli kiedyś będziecie chcieli w ten sposób przejmować projekty, czy równolegle rozwijać swoje gałęzie projektów pamiętajcie koniecznie o zachowaniu oryginalnej licencji (i stosujcie się do jej szczegółowych zapisów) i informacji o autorach w sekcji copyright.
Aby zainstalować bibliotekę PTable wystarczy skorzystać z narzędzia pip
.
pip3 install PTable
Następnie importujemy bibliotekę w swoim programie.
from prettytable import PrettyTable
Tabele w ASCII od strony praktycznej
Jak wspomniałem wcześniej najbardziej lubię bibliotekę PTable za prostotę konstruowania tabeli. Jeżeli operujemy na danych zapisanych w różnych zmiennych cały proces sprowadza się do trzech kroków: utworzenia obiektu tabeli, dodania nagłówków kolumn oraz dodania wierszy z danymi. Implementacja tego wygląda następująco:
TOutput = PrettyTable() TOutput.field_names = ['Device name', 'Loopback IP'] for r in links_database: TOutput.add_row( [r['DeviceName'], r['LoopbackIP']]) print(TOutput)
Powyższy kod pochodzi z mojego projektu CMLNetKit, który znajduje się na GitHub. W pierwszej linii utworzyłem nowy obiekt TOutput
typu PrettyTable()
. Mamy zatem do czynienia tutaj z programowaniem obiektowym w języku Python. Jedną z właściwości mojego obiektu jest field_names
, w której umieściłem nagłówki kolejnych kolumn. Muszą one być unikatowe. Następnie w pętli korzystając z metody add_row()
dodawałem do tabeli kolejne wiersze. Każdy wiersz jest listą, która składa się z tylu elementów ile jest kolumn. Jeżeli dana komórka ma być pusta to jako element listy wstawiamy wartość None
. Tak przygotowaną tabelę w ASCII na ekranie konsoli wyświetlamy jak każdą inną zmienną systemową funkcją print()
.
+-------------+-----------------+ | Device name | Loopback IP | +-------------+-----------------+ | iosv-0 | 192.168.99.1/32 | | iosv-1 | 192.168.99.2/32 | | iosv-2 | 192.168.99.3/32 | | csr1000v-0 | 192.168.99.4/32 | | asav-0 | None | | nxos-0 | 192.168.99.6/32 | | xrv-0 | 192.168.99.7/32 | | nxos9000-0 | 192.168.99.8/32 | | xr9kv-0 | 192.168.99.9/32 | +-------------+-----------------+
Ja lubię operować danymi posługując się wierszami – jest to bardziej intuicyjne i przypomina operowanie na tabelach bazy danych. Biblioteka pozwala jednak na konstruowanie tabeli przez dodawanie kolejnych kolumn za pomocą metody add_column()
.
Alternatywne biblioteki
Biblioteka PTable pozwala na proste wyświetlenie danych zapisanych w dobrze nam znanych strukturach – pliku CSV, tabeli HTML oraz bazy SQLite. Pierwsze dwa sposoby wydają się szczególnie przydatne, gdyż tymi dwoma typami plików często operujemy. Pozwala nam to uniknąć dodatkowego odczytywania danych z tych struktur i pomyłek na tym etapie. Przykłady zastosowania znajdują się w dokumentacji.
Biblioteka PTable to oczywiście nie jedyna oferująca tego typu możliwości. Jeżeli chcesz spróbować wyświetlać tabele w ASCII na konsolo masz o wyboru wiele innych bibliotek. Polecam zapoznać się choćby z TableIT. Podobnie ja w PTable rekordy tabeli definiujemy jako listę list. Popularna w użyciu jest także biblioteka tabulate. Zawiera ona więcej sposobów formatowania samej tabeli, ale wprowadzanie danych do wyświetlenia jest moim zdaniem mniej czytelne niż w PTable.
Wybierając bibliotekę zwróć uwagę na to, czy jest ona nadal rozwijana i utrzymywana przez developerów, czy wymaga wielu zależności (czyli innych bibliotek do poprawnego działania), a przede wszystkim wybierz taką, z którą najwygodniej będzie Ci pracować.