Python 输出漂亮的表格教程_第1页
Python 输出漂亮的表格教程_第2页
Python 输出漂亮的表格教程_第3页
Python 输出漂亮的表格教程_第4页
Python 输出漂亮的表格教程_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Python输出漂亮的表格.前言最近在用python写一个小工具,这个工具主要就是用来管理各种资源的信息,比如阿里云的ECS等信息,因为我工作的电脑使用的INUX,所以就想着用Python写一个命令行的管理工具,基本的功能就是同步阿里云的资源的信息到数据库,然后可以使用命令行查询。因为信息是展现在命令行中的,众所周知,命令行展现复杂的文本看起来着实累人,于是就想着能像表格那样展示,那看起来就舒服多了。prettytable库就是这么一个工具,prettytable可以打印出美观的表格,并且对中文支持相当好(如果有试图自己实现打印表格,你就应该知道处理中文是多么的麻烦)说明:本文使用Markdo

2、wn语法编写,为了展示方便,以及复制方便,所以本文中没有使用截图,因为格式控制的问题,文章中的运行结果会出现一些分割线的偏移,在终端中呈现并此问题,请各位手动去操作验证。.安装prettytable并非python的内置库,通过pipinstallprettytable即可安装。.一个小示例我们先来看一个示例:#!/usr/bin/python#*coding:utf-8*importsysfromprettytableimportPrettyTablereload(sys)号务务务务务务务务务编,ip地址)01,172.16.0.1)02,172.16.0.2)03,172.16.0.3)0

3、4,172.16.0.4)05,172.16.0.5)06,172.16.0.6)07,172.16.0.7)08,172.16.0.8)09,172.16.0.9)sys.setdefaultencoding(utf8)table=PrettyTable(编号table.add_row(T,server01,table.add_row(2,server02,table.add_row(3,server03,table.add_row(4,server04,table.add_row(5,server05,table.add_row(6,server06,table.add_row(7,ser

4、ver07,table.add_row(8,server08,table.add_row(9,server09,print(table)以上示例运行结果如下:linuxopsdeepin:$pythonp.py+111|编号|云编号+111|1|server01|月服|2|server02|月服|3|server03|服|4|server04|月服+I+务务务务名称IIP地址I器01门72.16.0.1I器02|172.16.0.2|器03|172.16.0.3|器04|172.16.0.4|56789|server05server06server07server08server09务务务务务

5、172.16.0.5172.16.0.6172.16.0.7172.16.0.8172.16.0.9+111在以上的示例中,我们通过form导入了表格库。table实例化了一个表格库,并且添加了编号,云编号,名称,IP地址为表头,如果没有添加表头,那么会以默认的Field+编号显示,例如:+|Field1|Field2|Field3|Field4+所以为更直观看出每一列的意义,还是要添加表头的。.添加数据prettytable提供了多种的添加数据的方式,最常用的应该就是按行按列添加数据了。A、按行添加数据table.add_row在上面简单的示例中,我们就是按行添加数据的。添加的数据必须要是列

6、表的形式,而且数据的列表长度要和表头的长度一样。在实际的使用中,我们应该要关注到添加的数据是否和表头对应,这一点很重要。B、按列添加数据table.add_column()看下面的示例:#!/usr/bin/python#*coding:utf-8*importsysfromprettytableimportPrettyTablereload(sys)sys.setdefaultencoding(utf8)table=PrettyTable。称,IP地址)01,172.16.0.1)table.add_column(项目,编号,云编号,名table.add_column(值,T,server0

7、1,服务器print(table)运行结果如下:TOC o 1-5 h z+|index|项目|值|+|1|编号|1|2|云编号|server01|I3I名称I服务器01II4IIP地址门72.16.0.1I+以上示例中,我们通过add_column来按列添加数据,按列添加数据不需要在实例化表格的时候制定表头,它的表头是在添加列的时候指定的。table.add_column(项目,编号,云编号,名称,IP地址)这一行代码为例,项目指定了这个列的表头名为项目,编号,云编号,名称,IP地址为列的值,同样为列表。C、从csv文件添加数据PrettyTable不仅提供了手动按行按列添加数据,也支持直接

8、fev文件中读取数据。#!/usr/bin/python#*coding:utf-8*importsysfromprettytableimportPrettyTablefromprettytableimportfrom_csvreload(sys)sys.setdefaultencoding(utf8)table=PrettyTable。fp=open(res.csv,r)table=from_csv(fp)print(table)fp.close()123456789server01server02server03server04server05server06server07server0

9、8server09务务务务务务务务务12oO172.16.0.1172.16.0.2172.16.0.3172.16.0.4172.16.0.5172.16.0.6172.16.0.7172.16.0.8172.16.0.9如果要读取cvs文件数据,必须要先导入from_csv,否则无法运行。上面的示例运行结果如下:+1编号|云编号|名称|IP地址+csv文件不能通过xls直接重命名得到,会报错。如果是xls文件,请用另存为csv获得csv文件D、从sql查询值添加从数据库查询出来的数据可以直接导入到表格打印,下面的例子使用了sqlite3,如果使用的是mysql也是一样的,只要能查询到数据就

10、能导入到表格中#!/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)运行结果如下:+|编号|云编号|

11、名称|IP地址|+123456789server01server02server03server04server05server06server07server08server09艮艮艮艮艮艮艮艮艮-一-一-一-一-一-一-一-一-一务务务务务务务务务123456789OOOOOOOOO172.16.0.1172.16.0.2172.16.0.3172.16.0.4172.16.0.5172.16.0.6172.16.0.7172.16.0.8172.16.0.9+E、从HTML导入数据支持从html的表格中导入,请看下面这个例子:#E/usr/bin/pythiDnflcoding:utf-

12、S1*5*import575fromprettytableimportPrettyTablefromprettytableimportfroni_htnilreload(sys)5y5.5etdefaultencoding(utf-8)htrnl_5tring=,1th编号th-J廿3云编号八4th名/1h)廿二工丽址服务器皿4Hbi72.i6.e.i服务器代172.16.e,25血table=fromhtml(titmlstring)print(tableO运行结果如下:TOC o 1-5 h z+IP地址|172.16.0.1|1172.16.0.21|编号|云编号|名称|+|1|serv

13、er01|服务器01|2|server02|服务器02+如上示例中,我们可以导入html的表格,但是不一样的地方是print语句,使用html表格导入数据的时候print的必须是列表中的第一个元素,否则有可能会报这样的错误。这是因为table并不是PrettyTable对象,而是包含单个PrettyTable对象的列表,它通过解析html而来,所以无法直接打印table,而需要打印table05.表格输出格式正如支持多种输入一样,表格的输出也支持多种格式,我们在上面中的例子中已经使用了print的方式输出,这是一种常用的输出方式。A、print直接通过print打印出表格。这种方式打印出的表格

14、会带边框。B、输出HTML格式的表格print(table.get_html_string(可)以打印出html标签的表格。在上面的例子中,使用print(table.get_html_string(后打印出如下结果:tables编号七云编号。七th)名称/thcthA工P地址ctdlserver01艮务器毗ctd172.LS.0.lctd2ctd5erver92td)服务器62btebi72.ifr.e_2.选择性输出prettytable在创建表格之后,你依然可以有选择的输出某些特定的行.A、输出指定的列printtable.get_string(fields=Sz#,IP地址)可以输出指

15、定的列B、输出前两行通过print(table.get_string(start=0,end=2)可以打印出指定的列,当然start和end参数让我可以自由控制显示区间。当然区间中包含start不包含end,是不是很熟悉这样的用法?根据输出指定行列的功能,我们可以同时指定行和列来输出,这里就不说明了。C、将表格切片从上面的输出区间,我们做一个大胆的假设,既然区间包含tart不包含end这种规则和切片的一样,我们可以不可通过切片来生成一个新的表格然后将其打印。事实上是可以的。new_table=table0:2print(new_table)如上代码段中,我们就可以打印出0到1行共2行的表格,p

16、ython的切片功能异常强大,配合切片我们可以自由的输入任意的行。D、输出排序有时候我们需要对输出的表格进行排序,使用printtable.get_string(sortby=编号,reversesort=True)就可以对表格进行排序,其中reversesort指定了是否倒序排序,默认为False,即默认正序列排序。sortby指定了排序的字段。.表格的样式A、内置样式通过set_style(H以设置表格样式,prettytable内置了多种的样式个人觉得MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT这三种样式看起来比较清爽,在终端下显示表格本来看起就很累,再加上

17、一下花里胡哨的东西看起来就更累。除了以上推荐的三种样式以外,还有一种样式不得不说,那就是RANDOM,这是一种随机的样式,每一次打印都会在内置的样式中随机选择一个,比较好玩。具体内置了几种样式,请各位参考官网完整自己尝试输出看看。#!/usr/bin/python#*coding:utf-8*importsysimportPrettyTableimportMSWORD_FRIENDLYimportPLAIN_COLUMNSimportRANDOMimportDEFAULTfromprettytablefromprettytablefromprettytablefromprettytablefr

18、omprettytablereload(sys)sys.setdefaultencoding(utf8)名称,IP地址)01,172.16.0.1)03,172.16.0.3)02,172.16.0.2)09,172.16.0.9)04,172.16.0.4)05,172.16.0.5)06,172.16.0.6)08,172.16.0.8)07,172.16.0.7)艮艮艮艮艮艮艮艮艮-一-一-一-一-一-一-一-一-一务务务务务务务务务口古口古口古口古口古口古table=PrettyTable(编号,table.add_row(1,server01,table.add_row(3,serv

19、er03,table.add_row(2,server02,table.add_row(9,server09,table.add_row(4,server04,table.add_row(5,server05,table.add_row(6,server06,table.add_row(8,server08,table.add_row(7,server07,table.setstyle(DEFAULT)print(table)B、自定义样式除了内置的样式以外,PrettyTable也提供了用户自定义,例如对齐方式,数字输出格式,边框连接符等等C、设置对齐方式align提供了用户设置对齐的方式,

20、值揖,r,c方便代表左对齐,右对齐和居中如果不设置,默认居中对齐。D、控制边框样式在PrettyTable中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交叉的链接符号)如下示例:#!/usr/bin/python#*coding:utf-8*importsysfromprettytableimportPrettyTablereload(sys)sys.setdefaultencoding(utf8)名称,IP地址)01,172.16.0.1)03,172.16.0.3)02,172.16.0.2)09,172.16.0.9)04,172.16.0.4)05,172.16.0.5)06,172.16.0.6)08,172.16.0.8)07,172.16.0.7)艮艮艮艮艮艮艮艮艮-一-一-一-一-一-一-一-一-一务务务务务务务务务口古口古口古口古口古口古table=PrettyTable(编号table.add_row(1,server01,table.add_row(3,server0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论