我是python的新手,正在经历一个问题.我有一个文本文件,我将其读入列表,然后将其分成块或"团队".子列表的数量是根据我想要的团队数量创建的.这一切都完成了.但我想以一种漂亮的表格格式打印出来.我已经调查了以下这个,这个和这个问题,但它们不是我想要的.我甚至看过pypi模块PrettyTable和DataGrid.
我的最终列表如下所示:
['name9', 'name2'], ['name4', 'name11'], ['name10', 'name3'], ['name7', 'name6'], ['name5', 'name8'], ['name']]
Run Code Online (Sandbox Code Playgroud)
我打印出来像这样:
for i in range(len(l)):
print "Teams{}\t\t ".format(i+1),
print
for x in itertools.izip_longest(*l, fillvalue="."):
print "\n"
t = "\t\t ".join(str(i) for i in x)
print t
Run Code Online (Sandbox Code Playgroud)
结果如下:
Teams1 Teams2 Teams3 Teams4 Teams5 Teams6
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
Run Code Online (Sandbox Code Playgroud)
有什么方法可以得到这样的输出:
Team 1 Team 2 Team 3 Team 4 Team 5 Team 6
-------------------------------------------------------------------
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
Run Code Online (Sandbox Code Playgroud)
并恰好对齐它们?
或者,如果您不想使用第三方库:
from itertools import izip_longest
data = [['name9', 'name2'], ['name4', 'name11'], ['name10', 'name3'], ['name7', 'name6'], ['name5', 'name8'], ['name']]
length = max(len(name) for names in data for name in names)
gutter = 5
format_string = '{{:<{}}}'.format(length + gutter)
print ''.join(format_string.format('Team {}'.format(x)) for x in range(len(data)))
print '-' * len(data) * (length + gutter)
for names in izip_longest(*data, fillvalue='.'):
print ''.join(format_string.format(name) for name in names)
Run Code Online (Sandbox Code Playgroud)
生产:
Team 0 Team 1 Team 2 Team 3 Team 4 Team 5
------------------------------------------------------------------
name9 name4 name10 name7 name5 name
name2 name11 name3 name6 name8 .
Run Code Online (Sandbox Code Playgroud)