在python中创建漂亮的列输出

我试图在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库来做到这一点,但找不到任何有用的东西。


偶然的你
浏览 651回答 3
3回答

小怪兽爱吃肉

data = [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]col_width = max(len(word) for row in data for word in row) + 2  # paddingfor row in data:    print "".join(word.ljust(col_width) for word in row)a            b            c            aaaaaaaaaa   b            c            a            bbbbbbbbbb   c   这样做是计算最长的数据条目以确定列宽,然后用于.ljust()在打印每列时添加必要的填充。

DIEA

从Python 2.6+开始,您可以按以下方式使用格式字符串将列设置为最少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

暮色呼如

我带着相同的要求来到这里,但@lvc和@Preet的答案似乎更符合column -t那些列中产生的宽度不同的内容:>>> rows =  [   ['a',           'b',            'c',    'd']...         ,   ['aaaaaaaaaa',  'b',            'c',    'd']...         ,   ['a',           'bbbbbbbbbb',   'c',    'd']...         ]...>>> widths = [max(map(len, col)) for col in zip(*rows)]>>> for row in rows:...     print "  ".join((val.ljust(width) for val, width in zip(row, widths)))...a           b           c  daaaaaaaaaa  b           c  da           bbbbbbbbbb  c  d
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python