Tabele w ASCII

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ć.


Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)