Перейти к содержимому

Как вывести таблицу в python

  • автор:

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

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Печать табличных данных в файл, модуль prettytable
  • Удаление данных из таблицы, модуль prettytable
  • Управление выводом таблицы, модуль prettytable
  • Управление внешним видом таблицы, модуль prettytable
  • Генерация HTML и JSON при помощи prettytable

Как напечатать таблицу с помощью f-string

Разберём, как напечатать красивую таблицу с одинаковой шириной колонок, с разной шириной колонок, с шапкой из двух строк. Создадим функцию с параметром максимальной ширины таблицы и функцию для записи таблицы в текстовый файл.

В этой статье мы разберём как напечатать красивые таблицы:

  • с одинаковой шириной колонок;
  • с разной шириной колонок;
  • с шапкой из двух строк.

А также создадим функции:

  • с параметром максимальной ширины таблицы;
  • для записи таблицы в текстовый файл.

«F-строки» были введены ещё в версии Python 3.6, и все уже давно, наверно, их используют в своём коде. Для тех, кто хочет освежить память, и ещё раз перечитать документацию — PEP 498 – Literal String Interpolation. Мы же будем использовать «f-строки» для вывода данных в табличном виде. Для примера возьмём данные об автомобилях с одного из онлайн-рынков такой структуры:

data = [ ['Volkswagen', 'Golf V', '2008', '8000', '154000'], ['Mazda', 'CX-5', '2013', '14800', '117000'], ['Honda', 'CR-V AWD', '2017', '22000', '57000'], ['BMW', '320', '2015', '14700', '124000'], ['BMW', 'X1', '2012', '17000', '62000'], ['Mercedes-Benz', 'E 220', '2009', '9300', '240000'], ['Volkswagen', 'Golf VI STYLE', '2011', '9700', '203000'], ['Mazda', '6', '2006', '5600', '218000'], ['Hyundai', 'Tucson LOUNGE 2009', '2008', '8899', '149000'], ['BMW', '520', '2013', '21700', '146000'], ['Toyota', 'Highlander', '2015', '28000', '120000'], ['Mercedes-Benz', 'E 220', '2005', '8200', '276000'], ['BMW', '328', '2012', '12500', '260000'], ['Opel', 'Astra J', '2013', '9500', '224000'], ['Volkswagen', 'Passat B7', '2013', '11750', '138000'], ['Audi', 'A6 Quattro', '2006', '8000', '28000'] ] 
columns = ['Марка', 'Модель', 'Год', 'Цена', 'Пробег'] 

Таблица с одинаковой шириной колонок

Для того, чтоб данные в колонках таблицы выровнять по центру, левому или правому краю, нужно рассчитать ширину колонок и определить отступ. Давайте сделаем ширину колонок одинаковой по максимальной строке столбца и отступом в один символ.

# расчёт максимальной длинны колонок max_columns = [] # список максимальной длинны колонок for col in zip(*data): len_el = [] [len_el.append(len(el)) for el in col] max_columns.append(max(len_el)) 
# печать таблицы с колонками максимальной длинны строки # печать шапки таблицы for column in columns: print(f'>', end='') print() # печать разделителя шапки print(f'') # печать тела таблицы for el in data: for col in el: print(f'>', end='') print() 

Здесь в 4 строке кода, после : указана ширина колонок. Так как это не число, а выражение, его обрамляют фигурными скобками. Ширину колонок мы сделали по максимальной длине строки колонок и добавили еще один символ пустой строки » для отступов, end=» – указывает, что печать будет выводиться без переноса на новую строку. Выравнивание текста в строке по умалчиванию делается по левому краю, поэтому его не указываем. Далее будут рассмотрены все виды выравнивания.

Недостатки такой таблицы:

  • большая ширина (подходит для таблиц с примерно одинаковой длинной строк колонок);
  • трудно вычислить длину разделителя шапки.

Таблица с разной шириной колонок

Рассмотрим другой пример. Выведем таблицу с колонками максимальной длины строки каждого столбца.

# вывод таблицы с колонками максимальной длинны строки каждого столбца # печать шапки таблицы for n, column in enumerate(columns): print(f'>', end='') print() # печать разделителя шапки '=' r = f'' print(r[:-1]) # печать тела таблицы for el in data: for n, col in enumerate(el): print(f'>', end='') # выравнвание по правому краю > print() 

Теперь таблица стала компактнее.

В этом примере названия колонок меньше или равны ширине самих колонок. А что, если они будут больше? Например, состоять из двух слов.

Таблица с шапкой из двух строк

Если ширина названия колонок больше ширины колонок тела таблицы, тогда запишем их в шапке таблицы в две строчки — вот так:

Но теперь колонки названий могут быть шире рассчитанных ранее колонок тела таблицы. Придётся отдельно просчитать максимальные значения ширины колонок шапки и максимальные значения колонок тела таблицы, сравнить их и по большему значению задать ширину столбиков для всей таблицы.

# пишем название колонок в две строчки columns = [['Марка', 'Модель', 'Год', 'Цена $', 'Пробег км'], ['автомобиля', '', 'выпуска', '', '']] # вычислить максимальную длинну колонки шапки таблицы max_columns_title = [] # список максимальной ширины колонок шапки for col in zip(*columns): max_columns_title.append(max([len(el) for el in col])) max_col_title = max(max_columns_title) # максимальная ширина колонки шапки for col in columns: #width = [] for n, c in enumerate(col): # сравниваем максимальную колонку шапки с макс колонкой таблицы if max_columns[n] >= max_columns_title[n]: w = max_columns[n] + 2 width.append(w) else: w = max_columns_title[n] + 2 width.append(w) # пишем название колонок в две строчки print(f'>', end='') print() # печать разделителя шапки '=' print(f"") # печать тела таблицы for el in data: for n, col in enumerate(el): print(f'>', end='') print() print() 

Функция с параметром максимальной ширины таблицы

Давайте соберём наш код в функцию, но добавим ещё один параметр — максимальную ширину таблицы. И если ширина таблицы будет больше максимальной, заданной по умалчиванию — выведем сообщение. А также сделаем выравнивание текста в строках шапки таблицы по центру, в теле таблицы — по правому краю. Для этого надо всего лишь перед значением ширины строки вставить символ «^» — выравнивание по центру, «>» — выравнивание по правому краю, «

Давайте ещё изменим вывод нашей таблицы. Колонки «Цена $» и «Пробег км» выведем с , , как разделитель тысяч.

def print_table(data, columns, indent, max_width=100): # data — список списков, данные таблицы # columns — список списков, названия колонок таблицы # indent — отступ от края колонки # max_widt — допустимая ширина таблицы # max_columns — список максимальной длинны строки колонок # max_columns_title — список максимальной ширины колонок шапки # width — список ширины каждой колонки таблицы для печати # расчёт макимальной ширины колонок таблицы max_columns = [] for col in zip(*data): len_el = [] [len_el.append(len(el)) for el in col] max_columns.append(max(len_el)) # вычислить максимальную длинну колонки шапки таблицы max_columns_title = [] for col in zip(*columns): max_columns_title.append(max([len(el) for el in col])) # печать таблицы for col in columns: width = [] for n, c in enumerate(col): # сравниваем максимальную колонку шапки с макс колонкой таблицы if max_columns[n] >= max_columns_title[n]: w = max_columns[n] + indent width.append(w) else: w = max_columns_title[n] + indent width.append(w) # пишем название колонок в две строки if sum(width) >', end='') # выравниване по ценру else: print('Ширина таблицы больше допустимого значения') return print() # печать разделителя шапки '=' print(f"") # печать тела таблицы for el in data: for n, col in enumerate(el): if n < 3: print(f'>', end='') # выравнвание по правому краю else: print(f'', end='') # выравнвание по правому краю наследуется, с разделителем тысяч «,» print() 

Здесь, в 52 строке кода, в f’,> ‘ перед закрывающей фигурной скобкой вставлена запятая, как разделитель тысяч (кроме «,» можно ещё использовать «_»), ну а дальше форматирование сделает всё само:

Но это ещё не все возможности «спецификации формата».

Примечание: в F-string в фигурных скобках <> помещены «заменяющие поля». Двоеточие : указывает на поле format_spec , что означает нестандартный формат замены. Для него существует Мини-язык спецификации формата.

Функция для записи таблицы в текстовый файл

Часто приходится не только печатать таблицу, но и сохранять её в текстовом файле. Имея готовую функцию для печати, нетрудно переделать её для записи.

def write_table(file_name, data, columns, indent, max_width=100): # file_name — название текстового файла # data — список списков, данные таблицы # columns — список списков, названия колонок таблицы # indent — отступ от края колонки # max_widt — допустимая ширина таблицы # max_columns — список максимальной длинны строки колонок # max_columns_title — список максимальной ширины колонок шапки # width — список ширины каждой колонки таблицы для печати # расчёт макимальной ширины колонок таблицы max_columns = [] for col in zip(*data): len_el = [] [len_el.append(len(el)) for el in col] max_columns.append(max(len_el)) # вычислить максимальную длинну колонки шапки таблицы max_columns_title = [] for col in zip(*columns): max_columns_title.append(max([len(el) for el in col])) # запись таблицы with open(file_name, 'w', encoding='utf-8') as f: for col in columns: width = [] for n, c in enumerate(col): # сравниваем максимальную колонку шапки с макс колонкой таблицы if max_columns[n] >= max_columns_title[n]: w = max_columns[n] + indent width.append(w) else: w = max_columns_title[n] + indent width.append(w) # пишем название колонок в две строки if sum(width) >') else: print('Ширина таблицы больше допустимого значения') return f.write('\n') 

Вывод таблицы умножения в Python

Статьи

Автор Admin На чтение 3 мин Просмотров 12.8к. Опубликовано 20.08.2022

Введение

Довольно часто новичкам в Python при изучении темы «циклы» задают задание вывести таблицу умножения с помощью цикла. В статье разберём два способа вывода таблицы умножения в Python.

Вывод таблицы умножения в Python циклом for

И так, разберём вывод таблицы умножения используя цикл for. Для начала создаём цикл от одного, до десяти:

for i in range(1, 10):

В нём создаём вложенный цикл от одного, до десяти:

for i in range(1, 10): for j in range(1, 10):

Во вложенном цикле выведем перемножение i и j с использованием форматирования для более красивого вывода.

for i in range(1, 10): for j in range(1, 10): print("%4d" % (i * j), end="")

Ну и добавим пустой print() в основном цикле:

for i in range(1, 10): for j in range(1, 10): print("%4d" % (i * j), end="") print()

Вот что выведет программа после запуска:

Вывод таблицы умножения в Python циклом while

Теперь рассмотрим способ вывода таблицы умножения циклом while.

Для начала создадим переменную i, которая будет равняться единице:

i = 1

Теперь создадим сам цикл while, который не закончится, пока i будет меньше 10:

i = 1 while i < 10:

В цикле создадим переменную j, которая будет равняться единице, а после неё будет идти вложенный цикл while, который не закончится, пока j будет меньше 10:

i = 1 while i < 10: j = 1 while j < 10:

Во вложенном цикле будет идти точно такой же вывод, как и в способе с циклом for, а так же j будет увеличиваться на единицу:

i = 1 while i < 10: j = 1 while j < 10: print("%4d" % (i * j), end="") j += 1

В основном цикле пропишем пустой print(), и прибавление единице к i:

i = 1 while i < 10: j = 1 while j < 10: print("%4d" % (i * j), end="") j += 1 print() i += 1

Программа готова, вывод будет точно таким же, как и в первом способе:

Заключение

В статье мы с Вами научились выводить таблицу умножения в Python двумя способами. С использованием цикла for, и цикла while. Надеюсь Вам понравилась статья, удачи! ��

Вывод данных из таблицы SQLite [Часть 3]

13 августа 2015 г. Archy Просмотров: 49136 RSS 1
Примеры Python » SQLite » Общие вопросы sqlite get row, sqlite python, sqlite вывод, вывод данных sqlite

Вывод данных из таблицы SQLite

В предыдущей статьи [часть 2] мы рассмотрели моменты создания таблицы в базу данных и внесения данных в эту таблицу. В данной статье покажем пример как получить данные из таблицы.

#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys con = lite.connect('test.db') with con: cur = con.cursor() cur.execute("SELECT * FROM Cars") rows = cur.fetchall() for row in rows: print row

В этом примере, мы извлекаем все данные из таблицы Cars.

cur.execute("SELECT * FROM Cars")

Этот SQL запрос выбирает все данные из таблицы Cars.

rows = cur.fetchall()

Метод fetchall() получает все записи. Он возвращает результирующий набор. Технически, это кортеж. Каждый из внутренних кортежей представляет строку в таблице.

for row in rows: print row

Мы выводим данные в консоль, строка за строкой.

$ ./retrieveall.py (1, u'Audi', 52642) (2, u'Mercedes', 57127) (3, u'Skoda', 9000) (4, u'Volvo', 29000) (5, u'Bentley', 350000) (6, u'Citroen', 21000) (7, u'Hummer', 41400) (8, u'Volkswagen', 21600)

Это пример данных.

Получить все данные сразу нельзя, можно только в строковом виде.

#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys con = lite.connect('test.db') with con: cur = con.cursor() cur.execute("SELECT * FROM Cars") while True: row = cur.fetchone() if row == None: break print row[0], row[1], row[2]

В этом скрипте мы соединяемся с базой данных и получаем строки таблицы Cars одну за одной.

Данный скрипт можно запускать и у себя на сервере, будь то личный компьютер или VPS от host virtual server на mirohost.net которые знамениты своим качеством предоставления услуг и быстрой технической поддержкой.

while True:

Мы обращаемся к данным из цикла «While». Когда мы читаем последнюю строку, цикл завершается.

row = cur.fetchone() if row == None: break

Метод fetchone() возвращает следующую строку из таблицы. Если данных там больше не осталось, он возвращает None. В этом случае, мы прерываем цикл.

print row[0], row[1], row[2]

Данные возвращаются в форме кортежа. Здесь мы выбираем записи из кортежа. Первая – это ID, вторая – название машины и третья – цена машины.

$ ./retrieveonebyone.py 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21600

Такой результат скрипта мы получили после его выполнения.

Еще записи по теме

  • Игровой слот Golden Goddess - играй на деньги в самые прибыльные автоматы
  • Игровой автомат Planet of the Apes - играть в казино Азино Три Топора в слоты НетЕнт
  • Какому визуальному редактору следует отдать предпочтение?
  • Игровой автомат Garage - на официальный сайт Вулкан казино играть
  • Чтение изображения из SQLite
  • Администрирование сайтов - Нужно ли?
  • Основы SQLite - С чего начать?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *