python显示表格_python console实现表格格式化

python console下想实现类excel 一样的格式化表格输出 ,可以通过以下三个模块实现:test_table、PrettyTable、texttable,具体可以参看python wiki 页面。最终实现的效果如下图:

prettytable.png

一、test_table模块

test_table模块是perl下的SimpleTable模块的python化,从pipy站点上的下载量上来看下,基本上没有什么人用,所以该模块略过,不讲,有兴趣的可以到官网上下载试用下。

二、texttable模块

texttable模块属于相当轻量级的,核心文件为texttable.py ,这里使用官方的示例引入模块并使用示例如下:

table = Texttable()

table.set_cols_align(["l", "r", "c"])

table.set_cols_valign(["t", "m", "b"])

table.add_rows([["Name", "Age", "Nickname"],

["Mr\nXavier\nHuon", 32, "Xav'"],

["Mr\nBaptiste\nClement", 1, "Baby"]])

print(table.draw() + "\n")

table = Texttable()

table.set_deco(Texttable.HEADER)

table.set_cols_dtype(['t', # text

'f', # float (decimal)

'e', # float (exponent)

'i', # integer

'a']) # automatic

table.set_cols_align(["l", "r", "r", "r", "l"])

table.add_rows([["text", "float", "exp", "int", "auto"],

["abcd", "67", 654, 89, 128.001],

["efghijk", 67.5434, .654, 89.6, 12800000000000000000000.00023],

["lmn", 5e-78, 5e-78, 89.4, .000000000000128],

["opqrstu", .023, 5e+78, 92., 12800000000000000000000]])

print(table.draw())

模块直接运行结果如下:

[root@361way texttable-0.8.3]# python texttable.py

+----------+-----+----------+

| Name | Age | Nickname |

+==========+=====+==========+

| Mr | | |

| Xavier | 32 | |

| Huon | | Xav' |

+----------+-----+----------+

| Mr | | |

| Baptiste | 1 | |

| Clement | | Baby |

+----------+-----+----------+

text float exp int auto

==============================================

abcd 67.000 6.540e+02 89 128.001

efghijk 67.543 6.540e-01 90 1.280e+22

lmn 0.000 5.000e-78 89 0.000

opqrstu 0.023 5.000e+78 92 1.280e+22

该模块的输出样式是可自定义的,不过该由于相当轻量级,所以其并不支持以列(column)的方式增加,只支持以行(row)的方式增加数据,并将结果格式化对齐输出。

三、prettytable模块

prettytable模块是三个模块中使用下载人员最多的,也是本篇的重点介绍对象,该模块除了适用于本篇提到的ASCII table 之外,在其模块示例中可以看到其还可以用于同sql及html的交互。

1、ascii table

在格式化输出方式,其除了可以设定输出的格式外,同时相较于texttable模块在增加数据库里也相对灵活,即支持行添加数据,又支持列增加数据,同时还支持混合增加(需要注意的是同时存在行和列的情况下,行增加优先级要高于列增加,不然会报错)。

示例如下:

# Row by row...

row = PrettyTable()

row.field_names = ["City name", "Area", "Population", "Annual Rainfall"]

row.add_row(["Adelaide",1295, 1158259, 600.5])

row.add_row(["Brisbane",5905, 1857594, 1146.4])

row.add_row(["Darwin", 112, 120900, 1714.7])

row.add_row(["Hobart", 1357, 205556, 619.5])

row.add_row(["Sydney", 2058, 4336374, 1214.8])

row.add_row(["Melbourne", 1566, 3806092, 646.9])

row.add_row(["Perth", 5386, 1554769, 869.4])

# Column by column...

col = PrettyTable()

col.add_column("City name",["Adelaide","Brisbane","Darwin","Hobart","Sydney","Melbourne","Perth"])

col.add_column("Area", [1295, 5905, 112, 1357, 2058, 1566, 5386])

col.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769])

col.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9, 869.4])

# A mix of both!

mix = PrettyTable()

mix.field_names = ["City name", "Area"]

mix.add_row(["Adelaide",1295])

mix.add_row(["Brisbane",5905])

mix.add_row(["Darwin", 112])

mix.add_row(["Hobart", 1357])

mix.add_row(["Sydney", 2058])

mix.add_row(["Melbourne", 1566])

mix.add_row(["Perth", 5386])

mix.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769])

mix.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9, 869.4]

示例运行结果,可以查看模块中的test文件,这里给出最上面截图中使用的代码,如下:

from prettytable import *

value = 33

narrow = ["%.2f" % (i*0.01*value) for i in range(99,89,-1)]

narrow.insert(0,'-')

add = ["%.2f" % (i*0.01*value) for i in range(101,111)]

add.insert(0,'+')

field = [i for i in range(1,11)]

field.insert(0,'+/-')

x = PrettyTable()

x.field_names = field

x.add_row(narrow)

x.add_row(add)

print(x)

示例中title 和 value 行之间有横线格开,不过两行value 之间没有格开,可以通过修改最后一行为如下,即可实现每行都分格开:

result = x.get_string(hrules=ALL)

print(result)

2、在html中显示表格

将增加的数据输出为html 表格,在test示例中也为我们展示了testHtmlBreakLine方法、testHtmlOutput方法、testHtmlOutputFormated方法三个示例。这里不再例举,具体可以参看prettytable_test.py 文件。

3、与数据库的交互

这里的数据库的交互,准确的来说并不恰当,叫与数据源的交互应该更贴切一些,通过查看该包的帮助信息和源文件,可以看到提供的有三个方法:

from_csv、from_db_cursor、from_html 分别是从csv 文件、数据库、html 文件中获取表格的方法。具体可以自行尝试使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值