太漂亮了,用这个Python库可以输出漂亮的表格工作电脑用的是LINUX,所以想用python写一个命令行管理工具。基本功能是将阿里云资源的信息同步到数据库,然后使用命令行进行查询。因为信息是在命令行显示的,众所周知,在命令行显示复杂的文字似乎很累,所以我想像表格一样显示会舒服很多。prettytable库就是这样一个工具,prettytable可以打印漂亮的表格,而且对中文的支持相当好(如果你自己尝试打印表格,你应该知道处理中文有多麻烦)。安装prettytable不是python自带的库。pipinstallprettytable即可安装。例子先来看一个例子:#!/usr/bin/python#**coding:utf-8**importsysfromprettytableimportPrettyTablereload(sys)sys.setdefaultencoding('utf8')table=PrettyTable(['Number','云号','名称','IP地址'])table.add_row(['1','server01','server01','172.16.0.1'])table.add_row(['2','server02','server02','172.16.0.2'])table.add_row(['3','server03','server03','172.16.0.3'])table.add_row(['4','server04','server04','172.16.0.4'])table.add_row(['5','server05','server05','172.16.0.5'])table.add_row(['6','server06','server06','172.16.0.6'])table.add_row(['7','server07','server07','172.16.0.7'])table.add_row(['8','server08','server08','172.16.0.8'])table.add_row(['9','server09','server09','172.16.0.9'])print(table)上面例子的结果如下:linuxops@deepin:~$pythonp.py+------+----------+--------+------------+|编号|云数|姓名|IP地址|+-----+---------+---------+-----------+|1|服务器01|服务器01|172.16.0.1||2|服务器02|服务器02|172.16.0.2||3|服务器03|按列添加数据table.add_column()见下例:#!/usr/bin/python#**coding:utf-8**importsysfromprettytableimportPrettyTablereload(sys)sys.setdefaultencoding('utf8')table=PrettyTable()table.add_column('project',['number','cloudnumber','name','IP地址'])table.add_column('value',['1','server01','server01','172.16.0.1'])print(table)结果如下:+--------+--------+------------+|索引|项目|值|+--------+--------+------------+|1|编号|1||2|云数|server01||3|名称|server01||4|IP地址|172.16.0.1|+-------+-------+------------+In上面的例子,我们使用add_column按列添加数据。按列添加数据在实例化表时不需要指定表头。添加列时指定其标题。table.add_column('project',['number','cloudnumber','name','IPaddress'])以这行代码为例,project指定该列的表头名称为“project”,['Number','cloudnumber','name','IPaddress']是列的值,也是一个列表。从csv文件添加数据PrettyTable不仅提供手动按行列添加数据,还支持直接从csv文件中读取数据。#!/usr/bin/python#**coding:utf-8**importsysfromprettytableimportPrettyTablefromprettytableimportfrom_csvreload(sys)sys.setdefaultencoding('utf8')表=PrettyTable()fp=open("res.csv","r")table=from_csv(fp)print(table)fp.close()如果要读取cvs文件数据,必须先导入from_csv,否则不起作用。上面例子的结果如下:PS:csv文件不能直接通过xls重命名,会报错。如果是xls文件,请另存为csv得到csv文件。从sql中添加查询值,从数据库中查询到的数据可以直接导入到表单中进行打印。以下示例使用sqlite3。如果你用的是mysql也是一样的,只要你能查询到数据就可以导入到表单中。#!/usr/bin/python#**coding:utf-8**importsysfromprettytableimportPrettyTablefromprettytableimportfrom_db_cursorimportsqlite3reload(sys)sys.setdefaultencoding('utf8')conn=sqlite3.connect("/tmp/aliyun.db")cur=conn.cursor()cur.execute("SELECT*FROMres")table=from_db_cursor(cur)print(table)结果如下:+-----+----------+------------+------------+|编号|云数|名称|IP地址|+------+---------+--------+------------+|1|服务器01|服务器01|172.16.0.1||2|服务器02|服务器02|172.16.0.2||3|服务器03|服务器03|172.16.0.3||4|服务器04|服务器04|172.16.0.4||5|服务器05|172.16.0.6||7|服务器07|服务器07|172.16.0.7||8|服务器08|服务器08|172.16.0.8||9|服务器09|--------+------------+------------+从HTML导入数据支持从html表格导入,请看下面的例子:#!/usr/bin/python#**coding:utf-8**importsysfromprettytableimportPrettyTablefromprettytableimportfrom_htmlreload(sys)sys.setdefaultencoding('utf8')html_string='''
number | cloudnumber | name | IP地址 |
---|
1 | server01 | server01 | 172.16.0.1 |
2 | server02 | server02 | 172.16.0.2 |
'''table=from_html(html_string)print(table[0])结果如下:+------+----------+-----------+----------+|编号|云数|姓名|IP地址|+------+------------+-----------+------------+|1|服务器01|服务器01|172.16.0.1||2|服务器02|服务器02|172.16.0.2|+------+---------+--------+------------+在上面例如,我们可以导入html表格,但不同的是它是一个打印语句。使用html表格导入数据时,打印必须是列表的第一个元素,否则可能会报错[
]这是因为该表不是PrettyTable对象,而是包含单个PrettyTable对象的列表。是通过html解析得到的,所以不能直接打印table,需要打印table[0]。表的输出格式与支持多输入相同。输出还支持多种格式。在上面的例子中,我们使用了print方式进行输出,这是一种常见的输出方式。print通过print直接打印出表格。以这种方式打印的表格将有边框。以HTML格式输出表格print(table.get_html_string())可以打印出带有html标签的表格。在上面的示例中,使用print(table.get_html_string())将打印以下结果:number | cloudnumber | name | IP地址 |
---|
1 | server01 | Server01 | 172.16.0.1 |
2 | server02 | server02 | 172.16.0.2 |
选择性输出prettytable在创建表之后,你仍然可以选择性地输出一些特定的行。输出指定列printtable.get_string(fields=["number","IPaddress"])可以输出指定列输出的前两行可以通过print(table.get_string(start=0)打印出指定列,结束=2))。当然,开始和结束参数可以让我自由控制显示间隔。当然,区间包含开始,不包含结束。你熟悉这种用法吗?根据输出指定行和列的功能,我们可以指定同时输出行和列,这里不再赘述。从上面的输出范围中切出表格,我们做一个大胆的假设,由于范围包含start不包含end的规则和切片一样,我们可以通过切片生成一个新的表格,然后打印出来。其实可以。++++++$++++++++++++$%编号%云编号%名称%IP地址%$++++++$++++++++++$++++++++++$++++++++++++$%1%server01%服务器01%172.16.0.1%%3%server03%服务器03%172.16.0.3%%2%server02%server02%172.16.0.2%%9%server09%server09%172.16.0.9%%4%server04%server04%172.16.0.4%%5%server05%server05%172.16.0.5%%6%server06%server06%172.16.0.6%%8%server08%server08%172.16.0.8%%7%server07%server07%172.16.0.7%$++++++$++++++++++$++++++++++$++++++++++++++$