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

Управление внешним видом таблицы, модуль 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.

По умолчанию модуль prettytable выравнивает все столбцы в таблице по центру.

Модуль позволяет изменить выравнивание всех столбцов в таблице сразу, назначив односимвольную строку для атрибута PrettyTable.align. Допустимые строки: 'l', 'r' и 'c' для выравнивания влево, вправо и по центру соответственно:

>>> mytable.align = "r"
>>> print(mytable)
#+-----------+------+------------+-----------------+
#| 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 |
#+-----------+------+------------+-----------------+

Также можно изменить выравнивание отдельных столбцов на основе соответствующего имени поля, рассматривая атрибут PrettyTable.align, как если бы он был словарем.

>>> mytable.align["City name"] = "l"
>>> mytable.align["Area"] = "c"
>>> mytable.align["Population"] = "r"
>>> mytable.align["Annual Rainfall"] = "c"
>>> print(x)
#+-----------+------+------------+-----------------+
#| 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      |
#+-----------+------+------------+-----------------+

Встроенные стили отображения таблицы.

Можно устанавливать стиль для таблицы с помощью метода PrettyTable.set_style() перед любыми вызовами print() или PrettyTable.get_string(). Вот как напечатать таблицу в формате, который хорошо работает с функцией Microsoft Word "Преобразовать в таблицу":

>>> from prettytable import MSWORD_FRIENDLY
>>> mytable.set_style(MSWORD_FRIENDLY)
>>> print(mytable)
#| 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      |

В дополнение к встроенному стилю MSWORD_FRIENDLY в настоящее время есть два других встроенных стиля, которые можно использовать для своих таблиц:

  • DEFAULT - внешний вид по умолчанию, используемый для отмены любых изменений стиля, которые внесены.
  • PLAIN_COLUMNS - стиль без полей, который хорошо работает с программами командной строки для столбчатых данных.
  • MARKDOWN - стиль, соответствующий синтаксису Markdown.
  • ORGMODE - стиль таблицы, соответствующий синтаксису режима организации.

Создание пользовательского стиля отображения таблицы.

Модуль prettytable имеет несколько параметров стиля, которые управляют различными аспектами отображения таблиц. У пользователя есть свобода установить каждый из этих параметров индивидуально в соответствии с предпочтениями. Метод PrettyTable.set_style() просто делает это автоматически.

Параметры для управления стилями:

  • border - логический параметр (должен быть True или False). Определяет, будет ли вокруг стола нарисована граница.
  • header - логический параметр (должен быть True или False). Определяет, является ли первая строка таблицы заголовком, отображающим имена всех полей.
  • hrules - Управляет печатью горизонтальных линий после строк. Допустимые значения: FRAME, HEADER, ALL, NONE.Обратите внимание, что это переменные, определенные внутри модуля prettytable, поэтому обязательно импортируйте их или используйте prettytable.FRAME и т. д.
  • vrules - Управляет печатью вертикальных линий между столбцами. Допустимые значения: FRAME, ALL, NONE.
  • int_format - строка, которая контролирует способ печати целочисленных данных. Это работает так: print('% int_format d' % data)
  • float_format - строка, которая контролирует способ печати данных с плавающей запятой. Это работает так: print('% float_format f' % data)
  • padding_width - количество пробелов по обе стороны от данных столбца (используется, только если левое и правое отступы равны None).
  • left_padding_width - количество пробелов слева от данных столбца.
  • right_padding_width - количество пробелов справа от данных столбца.
  • vertical_char - односимвольная строка, используемая для рисования вертикальных линий. По умолчанию '|'.
  • horizontal_char - односимвольная строка, используемая для рисования горизонтальных линий. По умолчанию '-'.
  • junction_char - односимвольная строка, используемая для рисования стыков линий. По умолчанию '+'.

Примеры работы с параметрами стилей.

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

>>> mytable.border = False
>>> mytable.header = False
>>> mytable.padding_width = 5
>>> print(mytable)
# Adelaide  1295  1158259  600.5  
# Brisbane  5905  1857594  1146.4 
# Darwin    112    120900  1714.7 
# Hobart    1357   205556  619.5

Что-бы снова включить отображение нужного стиля, присвойте соответствующему атрибуту значение True, например mytable.border = True

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

x = PrettyTable()
x.border = False
x.header = False
x.padding_width = 5
# эквивалентно
x = PrettyTable(border=False, header=False, padding_width=5)

Изменение параметров стиля только один раз.

Если нет необходимости вносить долгосрочные изменения в стиль, изменяя атрибут, как в примере выше, то можно внести изменения, которые изменятся только для метода PrettyTable.get_string(), указав ключевые аргументы этого метода. Чтобы напечатать две "нормальные" таблицы и одну без полей между ними, можно сделать следующее:

print(mytable)
print(mytable.get_string(border=False))
print(mytable)