Я новичок в Python, и сейчас я пытаюсь красиво отформатировать данные для вывода на печать.
У меня есть один список, который используется для двух заголовков, и матрица, которая должна быть содержимым таблицы. Вот так:
teams_list = ["Man Utd", "Man City", "T Hotspur"]
data = np.array([[1, 2, 1],
[0, 1, 0],
[2, 4, 2]])
Обратите внимание, что названия заголовков не обязательно имеют одинаковую длину. Тем не менее, записи данных являются целыми числами.
Теперь я хочу представить это в виде таблицы, примерно так:
Man Utd Man City T Hotspur
Man Utd 1 0 0
Man City 1 1 0
T Hotspur 0 1 2
У меня есть догадка, что для этого должна быть структура данных, но я не могу ее найти. Я попытался использовать словарь и отформатировать печать, я пробовал циклы for с отступом и я пытался печатать как строки.
Я уверен, что должен быть очень простой способ сделать это, но я, вероятно, скучаю по нему из-за отсутствия опыта.
Ответы:
Некоторый специальный код для Python 2.7:
Это зависит
str.format()
и от формата спецификации мини-языка .источник
Для этого есть несколько легких и полезных пакетов Python:
1. табуляция : https://pypi.python.org/pypi/tabulate
В tabulate есть много опций для указания заголовков и формата таблицы.
2. PrettyTable : https://pypi.python.org/pypi/PrettyTable
PrettyTable имеет опции для чтения данных из базы данных CSV, HTML, SQL. Также вы можете выбрать подмножество данных, отсортировать таблицу и изменить стили таблицы.
3. текстовая таблица : https://pypi.python.org/pypi/texttable
с помощью texttable вы можете контролировать горизонтальное / вертикальное выравнивание, стиль границы и типы данных.
4. termtables : https://github.com/nschloe/termtables
с помощью texttable вы можете контролировать горизонтальное / вертикальное выравнивание, стиль границы и типы данных.
Другие опции:
источник
coalign
ключевое слово выравнивания столбцов не поддерживается в официальной версии Pypi. «tableprint» - средний, API сложный, мало распространенных примеров использования.источник
pip install numpy
теперь использует бинарные колеса на большинстве платформ (без компиляции) . Очевидно, что другие варианты двоичной установки были доступны еще до этого.Python на самом деле делает это довольно легко.
Что-то вроде
будет иметь выход
% Внутри строки по сути является escape-символом, а следующие за ним символы указывают Python, какой формат должны иметь данные. % Снаружи и после строки сообщает Python, что вы намерены использовать предыдущую строку в качестве строки формата и что следующие данные должны быть помещены в указанный формат.
В этом случае я использовал «% -12i» дважды. Чтобы разбить каждую часть:
Из документов: https://docs.python.org/2/library/stdtypes.html#string-formatting.
источник
print('%-20.2f' % position['deg'], '%-17.2f' % position['v2'])
где.2
указывается точность поплавкаf
Обновление ответа Свена Марнача для работы в Python 3.4:
источник
Когда я делаю это, мне нравится иметь некоторый контроль над деталями того, как таблица отформатирована. В частности, я хочу, чтобы ячейки заголовка имели другой формат, чем ячейки тела, а ширина столбцов таблицы должна быть такой же широкой, как каждая из них. Вот мое решение:
Вот вывод:
источник
Я знаю, что опаздываю на вечеринку, но я просто создал для этого библиотеку, которая, я думаю, могла бы реально помочь. Это очень просто, поэтому я думаю, что вы должны его использовать. Это называется TableIT .
Основное использование
Чтобы использовать его, сначала следуйте инструкциям по загрузке на странице GitHub .
Затем импортируйте это:
Затем составьте список списков, где каждый внутренний список представляет собой строку:
Тогда все, что вам нужно сделать, это напечатать это:
Это результат, который вы получаете:
Имена полей
Вы можете использовать имена полей, если хотите ( если вы не используете имена полей, вам не нужно говорить useFieldNames = False, потому что оно установлено по умолчанию ):
От этого вы получите:
Есть и другие применения, например, вы можете сделать это:
От этого:
Или вы могли бы сделать:
И из этого вы получаете:
Цвета
Вы также можете использовать цвета.
Вы используете цвета, используя опцию цвета ( по умолчанию он установлен на Нет ) и указания значений RGB.
Используя пример сверху:
Тогда вы получите:
Обратите внимание, что печать цветов может не работать, но она работает точно так же, как и в других библиотеках, которые печатают цветной текст. Я проверил, и каждый цвет работает. Синий также не испорчен, как при использовании по умолчанию
34m
escape-последовательность ANSI (если вы не знаете, что это такое, это не имеет значения). В любом случае, все это происходит из-за того, что каждый цвет является значением RGB, а не системным значением по умолчанию.Больше информации
Для получения дополнительной информации проверьте страницу GitHub
источник
Я думаю, это то, что вы ищете.
Это простой модуль, который просто вычисляет максимальную требуемую ширину для записей таблицы, а затем просто использует rjust и ljust для красивой печати данных.
Если вы хотите, чтобы ваш левый заголовок был выровнен по правому краю, просто измените этот вызов:
Из строки 53 с:
источник
Чистый Питон 3
Будет печатать
источник
Простой способ сделать это - перебрать все столбцы, измерить их ширину, создать row_template для этой максимальной ширины, а затем распечатать строки. Это не совсем то , что вы ищете , потому что в этом случае, вы должны сначала положить ваши заголовки внутри таблицы, но я думаю , это может быть полезным для кого - то другого.
Вы используете это так:
источник
Следующая функция создаст запрошенную таблицу (с numpy или без) с помощью Python 3 (возможно, также Python 2). Я выбрал ширину каждого столбца, соответствующую ширине самого длинного имени команды. Вы можете изменить его, если хотите использовать длину имени команды для каждого столбца, но это будет более сложным.
Примечание: Для прямого эквивалента в Python 2 можно заменить
zip
сizip
от itertools.Это приведет к следующей таблице:
Если вы хотите иметь вертикальные разделители строк, вы можете заменить
" ".join
на" | ".join
.Ссылки:
источник
Я попытался бы пройтись по списку и использовать форматтер CSV для представления нужных вам данных.
Вы можете указать табуляцию, запятую или любой другой символ в качестве разделителя.
В противном случае просто переберите список и напечатайте «\ t» после каждого элемента
http://docs.python.org/library/csv.html
источник
Я нашел это просто в поисках способа вывода простых столбцов. Если вам просто нужны столбцы без суеты , то вы можете использовать это:
РЕДАКТИРОВАТЬ: Я пытался быть как можно проще, и поэтому сделал некоторые вещи вручную, вместо того, чтобы использовать список команд. Чтобы обобщить актуальный вопрос ОП:
Выходы:
Но это больше не кажется более простым, чем другие ответы, возможно, с преимуществом, которое не требует больше импорта. Но ответ @ campkeith уже встречал это и является более надежным, поскольку он может обрабатывать более разнообразные длины меток.
источник