我正在尝试用python创建一个漂亮的列列表,以便与我创建的命令行管理工具一起使用。
基本上,我想要一个类似这样的列表:
[['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]
变成:
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c
在这里,使用普通的制表符是行不通的,因为我不知道每行中最长的数据。
这与Linux中的'column -t‘行为相同。
$ echo -e "a b c\naaaaaaaaaa b c\na bbbbbbbbbb c"
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c
$ echo -e "a b c\naaaaaaaaaa b c\na bbbbbbbbbb c" | column -t
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c
我到处寻找各种python库来做这件事,但是没有找到任何有用的东西。
发布于 2012-04-03 16:10:29
data = [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]
col_width = max(len(word) for row in data for word in row) + 2 # padding
for row in data:
print "".join(word.ljust(col_width) for word in row)
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c
这样做的目的是计算最长的数据条目以确定列宽,然后在打印出每一列时使用.ljust()
添加必要的填充。
发布于 2012-04-03 23:02:34
由于Python 2.6+,您可以通过以下方式使用format string将列设置为最少20个字符,并将文本右对齐。
table_data = [
['a', 'b', 'c'],
['aaaaaaaaaa', 'b', 'c'],
['a', 'bbbbbbbbbb', 'c']
]
for row in table_data:
print("{: >20} {: >20} {: >20}".format(*row))
输出:
a b c
aaaaaaaaaa b c
a bbbbbbbbbb c
发布于 2019-04-16 05:42:40
这有点晚了,而且是我编写的包的无耻插件,但您也可以查看Columnar包。
它接受输入列表和标头列表,并输出表格格式的字符串。这段代码创建了一个docker风格的表:
from columnar import columnar
headers = ['name', 'id', 'host', 'notes']
data = [
['busybox', 'c3c37d5d-38d2-409f-8d02-600fd9d51239', 'linuxnode-1-292735', 'Test server.'],
['alpine-python', '6bb77855-0fda-45a9-b553-e19e1a795f1e', 'linuxnode-2-249253', 'The one that runs python.'],
['redis', 'afb648ba-ac97-4fb2-8953-9a5b5f39663e', 'linuxnode-3-3416918', 'For queues and stuff.'],
['app-server', 'b866cd0f-bf80-40c7-84e3-c40891ec68f9', 'linuxnode-4-295918', 'A popular destination.'],
['nginx', '76fea0f0-aa53-4911-b7e4-fae28c2e469b', 'linuxnode-5-292735', 'Traffic Cop'],
]
table = columnar(data, headers, no_borders=True)
print(table)
或者你可以在颜色和边框上变得更花哨一点。
要阅读有关列大小调整算法的更多信息并查看其余部分,您可以查看上面的链接或查看Columnar GitHub Repo
https://stackoverflow.com/questions/9989334
复制相似问题