Python 格式化表格输出

25 投票
6 回答
91124 浏览
提问于 2025-04-17 07:32

我在用python2.7,想把表格数据打印到屏幕上。

我的代码大概是这样的:

for i in mylist:
   print "{}\t|{}\t|".format (i, f(i))

问题是,根据变量 i 或者 f(i) 的长度,数据就对不齐了。

我现在得到的结果是:

|foo |bar |
|foobo   |foobar  |

我想要的结果是:

|foo     |bar     |
|foobo   |foobar  |

有没有什么模块可以做到这一点呢?

6 个回答

23

在pypi上有一个很不错的模块,叫做PrettyTable。

这里有个教程可以参考

这是PrettyTable的页面

$ pip install PrettyTable
24

想要让表格看起来更漂亮,可以使用一个叫做 tabulate 的模块:

这是 tabulate 的链接

下面是 tabulate 文档中的一个例子:

>>> from tabulate import tabulate

>>> table = [["Sun",696000,1989100000],["Earth",6371,5973.6],
...          ["Moon",1737,73.5],["Mars",3390,641.85]]
>>> print(tabulate(table))
-----  ------  -------------
Sun    696000     1.9891e+09
Earth    6371  5973.6
Moon     1737    73.5
Mars     3390   641.85
-----  ------  -------------
32

其实自己写一个格式化函数并不难:

def print_table(table):
    col_width = [max(len(x) for x in col) for col in zip(*table)]
    for line in table:
        print "| " + " | ".join("{:{}}".format(x, col_width[i])
                                for i, x in enumerate(line)) + " |"

table = [(str(x), str(f(x))) for x in mylist]
print_table(table)

撰写回答