Создание форматированных таблиц с помощью Python
Теперь, когда вы освоили различные методы выравнивания, давайте применим их для создания хорошо отформатированных таблиц. Таблицы — распространённый способ отображения структурированных данных в удобочитаемом формате, а правильное выравнивание имеет решающее значение для эффективного представления табличной информации.
Простая таблица с колонками фиксированной ширины
Начнём с создания простой таблицы с колонками фиксированной ширины.
- Создайте новый файл с именем
simple_table.py в каталоге /home/labex/project:
## simple_table.py
print("Простая таблица фиксированной ширины")
print("-" * 50)
## Определите данные
header = ["Имя", "Возраст", "Город", "Профессия"]
data = [
["John Smith", 34, "New York", "Врач"],
["Sarah Johnson", 28, "San Francisco", "Инженер"],
["Michael Brown", 42, "Chicago", "Учитель"],
["Emily Davis", 31, "Boston", "Учёный"]
]
## Вывод заголовка
print(f"{header[0]:<20} {header[1]:<8} {header[2]:<15} {header[3]:<15}")
print("-" * 60)
## Вывод строк
for row in data:
print(f"{row[0]:<20} {row[1]:<8} {row[2]:<15} {row[3]:<15}")
- Сохраните файл и запустите его:
python3 ~/project/simple_table.py
- Вы увидите аккуратно отформатированную таблицу, подобную этой:
Простая таблица фиксированной ширины
--------------------------------------------------
Имя Возраст Город Профессия
------------------------------------------------------------
John Smith 34 New York Врач
Sarah Johnson 28 San Francisco Инженер
Michael Brown 42 Chicago Учитель
Emily Davis 31 Boston Учёный
Динамическая таблица с различными типами выравнивания
Разные типы данных часто лучше выглядят с различными стилями выравнивания. Например, текст часто выравнивается по левому краю, а числа — по правому. Давайте создадим более сложную таблицу с комбинированным выравниванием.
- Создайте новый файл с именем
dynamic_table.py в каталоге /home/labex/project:
## dynamic_table.py
print("Динамическая таблица с комбинированным выравниванием")
print("-" * 50)
## Определите данные
header = ["Продукт", "Цена", "Количество", "Итого"]
products = [
["Ноутбук", 1299.99, 3, 3899.97],
["Мышь", 24.50, 10, 245.00],
["Монитор", 349.95, 2, 699.90],
["Клавиатура", 49.99, 5, 249.95],
["Наушники", 89.95, 4, 359.80]
]
## Расчёт ширины колонок на основе содержимого
col_widths = [
max(len(str(header[0])), max(len(str(row[0])) for row in products)) + 2,
max(len(str(header[1])), max(len(f"${row[1]:.2f}") for row in products)) + 2,
max(len(str(header[2])), max(len(str(row[2])) for row in products)) + 2,
max(len(str(header[3])), max(len(f"${row[3]:.2f}") for row in products)) + 2
]
## Вывод заголовка
print(f"{header[0]:<{col_widths[0]}}"
f"{header[1]:>{col_widths[1]}}"
f"{header[2]:>{col_widths[2]}}"
f"{header[3]:>{col_widths[3]}}")
print("-" * sum(col_widths))
## Вывод строк с соответствующим выравниванием
for product in products:
print(f"{product[0]:<{col_widths[0]}}",
f"${product[1]:.2f}".rjust(col_widths[1]),
f"{product[2]}".rjust(col_widths[2]),
f"${product[3]:.2f}".rjust(col_widths[3]))
## Вывод итогов
total_quantity = sum(product[2] for product in products)
total_cost = sum(product[3] for product in products)
print("-" * sum(col_widths))
print(f"{'ИТОГО':<{col_widths[0]}}",
f"".rjust(col_widths[1]),
f"{total_quantity}".rjust(col_widths[2]),
f"${total_cost:.2f}".rjust(col_widths[3]))
... (остальная часть кода и текста документации)