我是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循环,并且尝试将其打印为字符串。
for
我确信必须有一种非常简单的方法来执行此操作,但是由于缺乏经验,我可能会错过它。
Python 2.7的一些特殊代码:
row_format ="{:>15}" * (len(teams_list) + 1) print(row_format.format("", *teams_list)) for team, row in zip(teams_list, data): print(row_format.format(team, *row))
有一些轻便有用的python软件包可用于此目的:
1.制表:https : //pypi.python.org/pypi/tabulate
from tabulate import tabulate print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'])) Name Age ------ ----- Alice 24 Bob 19
制表具有许多选项来指定标题和表格式。
print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'], tablefmt='orgtbl')) | Name | Age | |--------+-------| | Alice | 24 | | Bob | 19 |
from prettytable import PrettyTable t = PrettyTable(['Name', 'Age']) t.add_row(['Alice', 24]) t.add_row(['Bob', 19]) print(t) +-------+-----+ | Name | Age | +-------+-----+ | Alice | 24 | | Bob | 19 | +-------+-----+
PrettyTable具有从csv,html,sql数据库读取数据的选项。你还可以选择数据子集,对表进行排序和更改表样式。
PrettyTable
csv,html,sql
from texttable import Texttable t = Texttable() t.add_rows([['Name', 'Age'], ['Alice', 24], ['Bob', 19]]) print(t.draw()) +-------+-----+ | Name | Age | +=======+=====+ | Alice | 24 | +-------+-----+ | Bob | 19 | +-------+-----+
使用texttable,你可以控制水平/垂直对齐,边框样式和数据类型。
import termtables as tt string = tt.to_string( [["Alice", 24], ["Bob", 19]], header=["Name", "Age"], style=tt.styles.ascii_thin_double, # alignment="ll", # padding=(0, 1), ) print(string) +-------+-----+ | Name | Age | +=======+=====+ | Alice | 24 | +-------+-----+ | Bob | 19 | +-------+-----+
texttable