python console实现表格格式化
python console下想实现类excel 一样的格式化表格输出 ,可以通过以下三个模块实现:test_table、PrettyTable、texttable,具体可以参看python wiki 页面。最终实现的效果如下图:
一、test_table模块
test_table模块是perl下的SimpleTable模块的python化,从pipy站点上的下载量上来看下,基本上没有什么人用,所以该模块略过,不讲,有兴趣的可以到官网上下载试用下。
二、texttable模块
texttable模块属于相当轻量级的,核心文件为texttable.py ,这里使用官方的示例引入模块并使用示例如下:
1table = Texttable()
2table.set_cols_align(["l", "r", "c"])
3table.set_cols_valign(["t", "m", "b"])
4table.add_rows([["Name", "Age", "Nickname"],
5 ["Mr\nXavier\nHuon", 32, "Xav'"],
6 ["Mr\nBaptiste\nClement", 1, "Baby"]])
7print(table.draw() + "\n")
8table = Texttable()
9table.set_deco(Texttable.HEADER)
10table.set_cols_dtype(['t', # text
11 'f', # float (decimal)
12 'e', # float (exponent)
13 'i', # integer
14 'a']) # automatic
15table.set_cols_align(["l", "r", "r", "r", "l"])
16table.add_rows([["text", "float", "exp", "int", "auto"],
17 ["abcd", "67", 654, 89, 128.001],
18 ["efghijk", 67.5434, .654, 89.6, 12800000000000000000000.00023],
19 ["lmn", 5e-78, 5e-78, 89.4, .000000000000128],
20 ["opqrstu", .023, 5e+78, 92., 12800000000000000000000]])
21print(table.draw())
模块直接运行结果如下:
1[root@361way texttable-0.8.3]# python texttable.py
2+----------+-----+----------+
3| Name | Age | Nickname |
4+==========+=====+==========+
5| Mr | | |
6| Xavier | 32 | |
7| Huon | | Xav' |
8+----------+-----+----------+
9| Mr | | |
10| Baptiste | 1 | |
11| Clement | | Baby |
12+----------+-----+----------+
13 text float exp int auto
14==============================================
15abcd 67.000 6.540e+02 89 128.001
16efghijk 67.543 6.540e-01 90 1.280e+22
17lmn 0.000 5.000e-78 89 0.000
18opqrstu 0.023 5.000e+78 92 1.280e+22
该模块的输出样式是可自定义的,不过该由于相当轻量级,所以其并不支持以列(column)的方式增加,只支持以行(row)的方式增加数据,并将结果格式化对齐输出。
三、prettytable模块
prettytable模块是三个模块中使用下载人员最多的,也是本篇的重点介绍对象,该模块除了适用于本篇提到的ASCII table 之外,在其模块示例中可以看到其还可以用于同sql及html的交互。
1、ascii table
在格式化输出方式,其除了可以设定输出的格式外,同时相较于texttable模块在增加数据库里也相对灵活,即支持行添加数据,又支持列增加数据,同时还支持混合增加(需要注意的是同时存在行和列的情况下,行增加优先级要高于列增加,不然会报错)。
示例如下:
1# Row by row...
2row = PrettyTable()
3row.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
4row.add_row(["Adelaide",1295, 1158259, 600.5])
5row.add_row(["Brisbane",5905, 1857594, 1146.4])
6row.add_row(["Darwin", 112, 120900, 1714.7])
7row.add_row(["Hobart", 1357, 205556, 619.5])
8row.add_row(["Sydney", 2058, 4336374, 1214.8])
9row.add_row(["Melbourne", 1566, 3806092, 646.9])
10row.add_row(["Perth", 5386, 1554769, 869.4])
11# Column by column...
12col = PrettyTable()
13col.add_column("City name",["Adelaide","Brisbane","Darwin","Hobart","Sydney","Melbourne","Perth"])
14col.add_column("Area", [1295, 5905, 112, 1357, 2058, 1566, 5386])
15col.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769])
16col.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9, 869.4])
17# A mix of both!
18mix = PrettyTable()
19mix.field_names = ["City name", "Area"]
20mix.add_row(["Adelaide",1295])
21mix.add_row(["Brisbane",5905])
22mix.add_row(["Darwin", 112])
23mix.add_row(["Hobart", 1357])
24mix.add_row(["Sydney", 2058])
25mix.add_row(["Melbourne", 1566])
26mix.add_row(["Perth", 5386])
27mix.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769])
28mix.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9, 869.4]
示例运行结果,可以查看模块中的test文件,这里给出最上面截图中使用的代码,如下:
1from prettytable import *
2value = 33
3narrow = ["%.2f" % (i*0.01*value) for i in range(99,89,-1)]
4narrow.insert(0,'-')
5add = ["%.2f" % (i*0.01*value) for i in range(101,111)]
6add.insert(0,'+')
7field = [i for i in range(1,11)]
8field.insert(0,'+/-')
9x = PrettyTable()
10x.field_names = field
11x.add_row(narrow)
12x.add_row(add)
13print(x)
示例中title 和 value 行之间有横线格开,不过两行value 之间没有格开,可以通过修改最后一行为如下,即可实现每行都分格开:
1result = x.get_string(hrules=ALL)
2print(result)
2、在html中显示表格
将增加的数据输出为html 表格,在test示例中也为我们展示了testHtmlBreakLine方法、testHtmlOutput方法、testHtmlOutputFormated方法三个示例。这里不再例举,具体可以参看prettytable_test.py 文件。
3、与数据库的交互
这里的数据库的交互,准确的来说并不恰当,叫与数据源的交互应该更贴切一些,通过查看该包的帮助信息和源文件,可以看到提供的有三个方法:
from_csv、from_db_cursor、from_html 分别是从csv 文件、数据库、html 文件中获取表格的方法。具体可以自行尝试使用。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-ascii-table/4511.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.