Сообщить об ошибке.

Управление выводом таблицы, модуль prettytable в Python

Модуль prettytable позволяет управлять выводом таблицы, например можно ограничить вывод только теми полями или строками, которые необходимы к просмотру.

Создадим таблицу с которой будем работать:

from prettytable import PrettyTable
mytable = PrettyTable()
mytable.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
mytable.add_rows(
    [
        ["Adelaide", 1295, 1158259, 600.5],
        ["Brisbane", 5905, 1857594, 1146.4],
        ["Darwin", 112, 120900, 1714.7],
        ["Hobart", 1357, 205556, 619.5],
    ]
)

Управление выводом данных таблицы осуществляется методом PrettyTable.get_string().

Управление выводом колонок.

Аргумент fields метода PrettyTable.get_string() принимает список имен полей, которые нужно напечатать:

>>> table = mytable.get_string(fields=["City name", "Population"])
>>> print(table)
#+-----------+------------+
#| City name | Population |
#+-----------+------------+
#|  Adelaide |  1158259   |
#|  Brisbane |  1857594   |
#|   Darwin  |   120900   |
#|   Hobart  |   205556   |
#+-----------+------------+

Управление выводом строк.

Аргументы start и end метода PrettyTable.get_string() принимают индекс первой и последней строки для печати соответственно.

Обратите внимание, что индексация работает так же, как срезы списка Python - для печати 3-й и 4-й строк таблицы установите start равным 2 (первая строка - это строка 0, поэтому третья - это строка 2) и установите end на 4 (индекс 4-ой строки, плюс 1):

>>> table = mytable.get_string(start=2, end=4)
>>> print(table)
#+-----------+------+------------+-----------------+
#| City name | Area | Population | Annual Rainfall |
#+-----------+------+------------+-----------------+
#|   Darwin  | 112  |   120900   |      1714.7     |
#|   Hobart  | 1357 |   205556   |      619.5      |
#+-----------+------+------------+-----------------+

Управление сортировкой данных в таблице.

Аргументы sortby метода PrettyTable.get_string(), который принимает строку с именем одного поля, отсортирует данный столбец таблицы по возрастанию (от меньшего к большему).

>>> table = mytable.get_string(sortby='Area')
>>> print(table)
#+-----------+------+------------+-----------------+
#| City name | Area | Population | Annual Rainfall |
#+-----------+------+------------+-----------------+
#|   Darwin  | 112  |   120900   |      1714.7     |
#|  Adelaide | 1295 |  1158259   |      600.5      |
#|   Hobart  | 1357 |   205556   |      619.5      |
#|  Brisbane | 5905 |  1857594   |      1146.4     |
#+-----------+------+------------+-----------------+

Если необходимо отсортировать в обратном порядке, то в метод нужно добавить ключевой аргумент reversesort=True.

>>> table = mytable.get_string(sortby='Area', reversesort=True)
>>> print(table)
#+-----------+------+------------+-----------------+
#| City name | Area | Population | Annual Rainfall |
#+-----------+------+------------+-----------------+
#|  Brisbane | 5905 |  1857594   |      1146.4     |
#|   Hobart  | 1357 |   205556   |      619.5      |
#|  Adelaide | 1295 |  1158259   |      600.5      |
#|   Darwin  | 112  |   120900   |      1714.7     |
#+-----------+------+------------+-----------------+

Если необходимо, чтобы таблицы сортировались всегда определенным образом, то можно сделать этот параметр долгосрочным при помощи атрибута экземпляра класса PrettyTable.sortby:

# сортировка по колонке `Population`
>>> mytable.sortby = "Population"
# отсортирует вывод по колонке `Population`
>>> print(mytable)

Теперь, команда print(mytable) напечатает таблицу, отсортированную по колонке Population. Также, при помощи атрибута mytable.reversesort = True можно сортировать таблицу по колонке, указанной в mytable.sortby - в обратном порядке. Такое поведение будет сохраняться, пока не отключить сортировку атрибутом x.sortby = None.

# отключение сортировки
>>> mytable.sortby = None
# выведет таблицу в исходном виде
>>> print(mytable)

Если нужно указать пользовательскую функцию сортировки, то можно использовать ключевой аргумент sort_key.

Передайте аргументу sort_key функцию, которая принимает два списка значений и возвращает отрицательное или положительное значение в зависимости от того, должен ли первый список появляться до или после второго. Если в таблице n столбцов, то в каждом списке будет n + 1 элемент. Каждый список соответствует одной строке таблицы. Первым элементом будут данные из соответствующей строки в столбце, заданном аргументом sort_by. Остальные n элементов - это данные в каждом столбце таблицы по порядку, включая повторяющийся экземпляр данных в столбце sort_by.