Рисование таблиц в терминале
Кажется, что самый популярный инструмент для вывода данных в табличном виде на Python это пакет prettytable. Мне совсем не хотелось тащить в проект очередную зависимость, поэтому я написал простой класс, который позволяет делать то же самое, но немного попроще.
class Table:
"""Print table. Example::
t = Table()
t.header(['KEY', 'VALUE']) # header is optional
t.row(['key 1', 'value 1'])
t.row(['key 2', 'value 2'])
t.rows(
[
['key 3', 'value 3'],
['key 4', 'value 4']
]
)
t.print()
"""
def __init__(self, whitespace: str = '\t'):
self.__rows = []
self.__whitespace = whitespace
def header(self, columns: list):
self.__rows.insert(0, [str(col) for col in columns])
def row(self, row: list):
self.__rows.append([str(col) for col in row])
def rows(self, rows: list):
for row in rows:
self.row(row)
def print(self):
widths = [max(map(len, col)) for col in zip(*self.__rows)]
for row in self.__rows:
print(self.__whitespace.join(
(val.ljust(width) for val, width in zip(row, widths))))
Пример использвоания описан в докстринге класса Table, поэтому просто покажу каким может быть результат, на примере из документации PrettyTable:
CITY NAME AREA POPULATION ANNUAL RAINFALL
Adelaide 1295 1158259 600.5
Brisbane 5905 1857594 1146.4
Darwin 112 120900 1714.7
Hobart 1357 205556 619.5
Sydney 2058 4336374 1214.8
Melbourne 1566 3806092 646.9
Perth 5386 1554769 869.4
Большего для вывода в терминал на самом деле и не нужно. Такую табилцу очень легко распарсить в отличие от таблиц с обводкой. При необходимости класс можно расширить дополнительными методами.