用python创建好的列输出

2024-05-23 17:39:16 发布

您现在位置: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库来完成这项工作,但找不到任何有用的东西。


Tags: 数据命令行echo列表linuxcolumn制表符管理工具
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  # 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()添加必要的填充。

由于Python2.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

我带着同样的要求来到这里,但是@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  d
aaaaaaaaaa  b           c  d
a           bbbbbbbbbb  c  d

相关问题 更多 >