首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中创建漂亮的列输出

在python中创建漂亮的列输出
EN

Stack Overflow用户
提问于 2012-04-03 16:00:18
回答 17查看 270.9K关注 0票数 142

我正在尝试用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库来做这件事,但是没有找到任何有用的东西。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 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()添加必要的填充。

票数 138
EN

Stack Overflow用户

发布于 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
票数 187
EN

Stack Overflow用户

发布于 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

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9989334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档