В разделе рассмотрены варианты выравнивание столбцов и изменение внешнего вида полученной таблицы 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)