在Python中按顺序打印数据输出为格式化表

时间:2018-02-12 21:08:14

标签: python dataframe console format output

我正在查看Python软件包,这些软件包提供了一种简单的方法来制作格式化的“漂亮”软件包。表格作为文本输出。 This answer provides a few suggestions。问题是,我想按顺序打印我的表(一次一行),类似于记录器。

为了说明,tabulate的输出完全适用于我的应用程序:

from tabulate import tabulate   
some_data = [['08:01', 1.00, 32], ['08:02', 1.01, 33], ['08:03', 1.02, 33]]
headers = ['Time', 'x', 'n']
print(tabulate(some_data, headers=headers, tablefmt='plain'))

输出:

Time       x    n
08:01   1      32
08:02   1.01   33
08:03   1.02   33

但是我想一次一个地完成每个操作:  1.打印标题  2.打印第一行数据  3.打印下一个  4.等等。

当然,我试过这个:

print(tabulate(some_data[0:1], tablefmt='plain'))

输出:

08:01  1  32

这显然不会完美,因为每行的格式每次都会有所不同。所以我需要一个包,你可以先设置表(指定所需的格式,列宽等)。然后一次输出一行数据。

有人知道这些包中的其中一个或我可以导入的其他包是否可行?

2 个答案:

答案 0 :(得分:1)

只需使用内置的python format命令就可以获得非常好的简单表。您可以指定格式字符串,然后将其用作“模板”并传入要应用于该模板的数据。

format_string = "{:<10}{:<8}{:<10}"
print(format_string.format(*headers))
for entry in some_data:
    print(format_string.format(*entry))

有关填充等各种选项的完整列表,请参阅https://pyformat.info

答案 1 :(得分:0)

str.format()

您可以使用.format使用字符串格式,如下所示:

some_data = [['08:01', 1.00, 32], ['08:02', 1.01, 33], ['08:03', 1.02, 33]]
h = ['Time', 'x', 'n']

print('{:<10s} {:<5s} {:<5s}'.format(*h))
for list_ in some_data:
    print('{:<10s} {:.2f} {:<5d}'.format(*list_))

然后会打印以下内容:

Time       x     n
08:01      1.00 32
08:02      1.01 33   
08:03      1.02 33

您可以使用花括号{}内的值来获得更理想的输出,但这基本上可以完成这项工作。

有关字符串格式的更多信息,请访问:https://docs.python.org/3.5/library/string.html

编辑:已解包*