Как напечатать таблицу с выравниванием столбцов?

Имя
Возраст
Город
Алиса
30
Москва
Боб
25
Санкт-Петербург

Вывод таблицы с выравниванием столбцов в Python (без таблиц HTML)

Для вывода таблицы с выравниванием столбцов в Python без использования HTML-таблиц можно применить строковое форматирование. Основная идея заключается в определении максимальной длины каждой колонки и использовании этой информации для создания строк с фиксированной шириной. Вот пример реализации:


data = [
    ["Имя", "Возраст", "Город"],
    ["Alice", "30", "New York"],
    ["Bob", "25", "London"],
    ["Charlie", "35", "Paris"],
    ["David", "40", "Tokyo"]
]

def print_aligned_table(data):
  """Печатает таблицу с выравниванием столбцов."""

  col_widths = [max(len(str(item)) for item in col) for col in zip(*data)]  # Определяем ширину каждой колонки
  format_string = "  ".join(["{{:<{}}}".format(width) for width in col_widths]) # Создаем строку форматирования

  for row in data:
    print(format_string.format(*row))


print_aligned_table(data)
  

Разъяснение кода:

  • `data`: Представляет собой список списков, где каждый внутренний список – это строка таблицы.
  • `col_widths`: Вычисляется максимальная длина каждой колонки. Используется `zip(*data)` для транспонирования данных (преобразования строк в колонки), затем `max()` для поиска максимальной длины в каждой колонке, а `str(item)` гарантирует, что числа тоже учитываются при определении длины.
  • `format_string`: Формируется строка форматирования. Для каждой колонки создается placeholder `{{:<{}}}`, где `:<` означает выравнивание по левому краю, а `{}` будет заменено шириной колонки. `" ".join(...)` объединяет эти placeholder-ы с двойными пробелами между колонками.
  • Цикл `for row in data`: Итерируется по каждой строке данных.
  • `print(format_string.format(*row))`: Применяет строку форматирования к каждой строке, используя оператор `*` для распаковки строки в отдельные аргументы для метода `format()`. Это подставляет значения из строки в placeholder-ы в `format_string`, выравнивая текст по левому краю и создавая таблицу с выровненными колонками.

Альтернативные подходы:

  • Использование `tabulate`: Библиотека `tabulate` предоставляет более гибкие возможности для форматирования таблиц, включая различные стили выравнивания, границы и другие опции. Требует установки: `pip install tabulate`.
  • `f-strings` (Python 3.6+): Можно использовать `f-strings` для более лаконичного кода, но синтаксис может быть менее читаемым при сложной логике форматирования.

Пример использования `tabulate`:


from tabulate import tabulate

data = [
    ["Alice", 30, "New York"],
    ["Bob", 25, "London"],
    ["Charlie", 35, "Paris"],
    ["David", 40, "Tokyo"]
]

headers = ["Имя", "Возраст", "Город"]

print(tabulate(data, headers=headers, tablefmt="grid"))
  

Этот пример использует `tabulate` для вывода таблицы с заголовками и форматированием "grid". `tablefmt` позволяет выбирать различные стили таблиц.

0