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

下载本文档

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

文档简介

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

2、使用 Markdown语法编写,为了展示方便,以及复制方便,所以本 文中没有使用截图,因为格式控制的问题,文章中的运行结果会出现一些分割线的 偏移,在终端中呈现并此问题,请各位手动去操作验证。2 .安装pip install prettytableprettytable 并非python的内置库,通过可安装。3 . 一个小示例我们先来看一个示例:#!/usr/bin/python#*coding:utf-8*import sysfrom prettytable import PrettyTablereload(sys)sys.setdefaultencoding('utf8')

3、table = PrettyTable(' 编 号 table.add_row('1','server01',' table.add_row('2','server02',' table.add_row('3','server03',' table.add_row('4','server04',' table.add_row('5','server05',' table.add_row(&

4、#39;6','server06',' table.add_row('7','server07',' table.add_row('8','server08',' table.add_row('9','server09',' print(table)号务务务务务务务务务 编器01','172.16.0.1')器02','172.16.0.2')器03','172.16.0.3

5、9;)器04','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')名 称 ,IP 地址 )以上示例运行结果如下:| 编号 |云 编 号| 1 | server01 |K| 2 | server02 |K| 3 | server03 |K| 4 | server04 |Klinuxopsdeepin:

6、$ python p.pyI 务务务务称器 器 器 器| IP 地 址 |01 | 172.16.0.1 |02 | 172.16.0.2 |03 | 172.16.0.3 |04 | 172.16.0.4 | 5| server05 | 6| server06 | 7| server07 | 8| server08 | 9| server09 |艮艮一二八一二八艮艮艮 一二八 一二八一二八务务务器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+在以上的示例中,我们通过form导入了表格库。t

7、able实例化了一个表格库,并且添加了 '编号; 云编号,名称','IP 地址'为表头,如果没有添加表头,那么会以 默认的Field+编号显示,例如:+| Field 1 | Field 2| Field 3| Field 4|+所以为更直观看出每一列的意义,还是要添加表头的。4 .添加数据prettytable提供了多种的添加数据的方式,最常用的应该就是按行按列添加数据了A、按行添加数据 table.add_row在上面简单的示例中,我们就是按行添加数据的。添加的数据必须要是列表的形式, 而且数据的列表长度要和表头的长度一样。在实际的使用中,我们应该要关注到添

8、加的数据是否和表头对应,这一点很重要。B、按列添加数据 table.add_column()看下面的示例:#!/usr/bin/python#*coding:utf-8*import sysfrom prettytable import PrettyTable reload(sys)sys.setdefaultencoding('utf8')table = PrettyTable()云编号',名称','IP 地址')服务器 01','172.16.0.1')table.add_column('项目',

9、9;编号, table.add_column('值','1','server01 print(table)运行结果如下:+| index |项目|值|+| 1 |编号|1| 2 |云编号| server01 | 3 | 名 称 | 4 | IP地I I I I服 务 器 01 |址| 172.16.0.1 |以上示例中,我们通过 add_column来按列添加数据,按列添加数据不需要在实 例化表格的时候制定表头,它的表*是在添加列的时候指定的。table.add_column(' 项目',' 编号',云编号',名称

10、','IP 地址') 这一行代 码为例,蕨目指定了这个列的表头名为"项目",'编号',云编号',名称','IP 地 址'为列的值,同样为列表。C、从csv文件添加数据PrettyTable 不仅提供了手动按行按列添加数据,也支持直接从csv文件中读取数据#!/usr/bin/python#*coding:utf-8* import sysfrom prettytable import PrettyTable from prettytable import from_csv reload(sys)sys.

11、setdefaultencoding('utf8')table = PrettyTable() fp = open("res.csv", "r") table = from_csv(fp) print(table) fp.close()如果要读取cvs文件数据,必须要先导入from_csv ,否则无法运行。上面的示例运行结果如下:1 I -|编号-U-UI |I -云编号I -|1|server01|2|server02|3|server03|4|server04|5|server05|6|server06|7|server07|8|se

12、rver08|+-9|server09|称 务务务务务务务务务 名艮艮一二八一二八艮 艮 艮 艮 艮 艮 艮 一二八一二八一二八一二八一二八一二八 一二八ooooooooo172.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.9csv文件不能通过 xls直接重命名得到,会报错。如果是csv获得csv文件xls文件,请用另存为D、从sql查询值添加从数据库查询出来的数据可以直接导入到表格打印,下面的例子使用了 使用的是mysql也是一样的,只要能查询到数据就能导入到表格中s

13、qlite3 ,如果#!/usr/bin/python #*coding:utf-8* import sys fromprettytableimportfromprettytableimportimport sqlite3 reload(sys) sys.setdefaultencoding('utf8')PrettyTable from_db_cursorconn = sqlite3.connect("/tmp/aliyun.db") cur = conn.cursor()cur.execute("SELECT * FROM res")

14、 table = from_db_cursor(cur) print(table)运行结果如下:+| 编号 | 云编号 | IP地址 |+- |1| server01|2| server02|3| server03|4| server04|5| server05|6| server06|7| server07|8| server08|+-9| server09|艮艮艮艮艮 一二八一二八 一二八一二八一二八艮艮艮 一二八一二八一二八务务务务务务务务务器01器02器03器04器05器06器07器08器09172.16.0.1172.16.0.2172.16.0.3172.16.0.4172.16.

15、0.5172.16.0.6172.16.0.7172.16.0.8172.16.0.9E、从HTML导入数据支持从html的表格中导入,请看下面这个例子:#!/usr/bin/pythan4f*coding:utf-8*import sysfrom prettytable import PrettyTable-From prettytable import from_htiil relcadfsys)sys.setdefaultencoding(' utf-8')htnl string-' * r<table>-<tr>th)编号/th)廿三编号

16、八2th名薪/ththl丽址"th></tr><td>l<Ztd><td>server0ictd><td>服务器fl工<td>172¥i6-e.L</td></tr><tr>std>2</td><td>5ervQr02C/td>td服务器心/><td>172,16.0,2</td></tr></table>'"table = fromhtml(htm

17、lstr i ng)print(table)运行结果如下:+名称|IP地址务器01|172.16.0.1务器02|172.16.0.2| 编号 | 云编号 |+|1|server01|月艮|2|server02|月艮+如上示例中,我们可以导入html的表格,但是不一样的地方是print语句,使用html表格导入数据的时候print的必须是列表中的第一个元素,否则有可能会报 口这 样的错误。这是因为table并不是PrettyTable 对象,而是包含单个 PrettyTable 对象的列表,它通过解析html而来,所以无法直接打印 table ,而需要打印table05 .表格输出格式正如支持

18、多种输入一样,表格的输出也支持多种格式,我们在上面中的例子中已经使用了 print的方式输出,这是一种常用的输出方式。A、print直接通过print打印出表格。这种方式打印出的表格会带边框。B、输出HTML格式的表格print(table.get_html_string()使用 print(table.get_html_string()可以打印出html标签的表格。在上面的例子中, 会打印出如下结果:<tables<tr>编号云编号 名集(八</tr><tr><td>5&rver91</td >服免器</tr&g

19、t;<tr>ctd>&erv&r02.</td>七4服务器钝</七4</tr>6 .选择性输出prettytable在创建表格之后,你依然可以有选择的输出某些特定的行.A、输出指定的列print table.get_string(fields="编号","IP 地址")可以输出指定的列B、输出前两行通过print(table.get_string(start = 0, end = 2)的可以打印出指定的列,当然start和end参数让我可以自由控制显示区间。当然区间中包含 start不包含e

20、nd, 是不是很熟悉这样的用法?根据输出指定行列的功能,我们可以同时指定行和列来输出,这里就不说明了。C、将表格切片从上面的输出区间,我们做一个大胆的假设,既然区间包含 start不包含end这种规则和切片的一样,我们可以不可通过切片来生成一个新的表格然后将其打印。事实上 是可以的。new_table = table0:2print(new_table)如上代码段中,我们就可以打印出0到1行共2行的表格,python的切片功能异常强大,配合切片我们可以自由的输入任意的行。D、输出排序有时候我们需要对输出的表格进行排序,使用print table.get_string(sortby="

21、编号",reversesort=True)就可以对表格进行排序,其中 reversesort指定了是否倒序排序,默认为False ,即默认正序列排序。sortby指定了排序的字段。7 .表格的样式A、内置样式通过set_style() 可以设置表格样式,prettytable 内置了多种的样式个人觉得 MSWORD_FRIENDPLAIN_COLUMNSDEFAULT这三种样式看起来比较清爽,在终 端下显示表区本来看起就很累,再加上一下花里胡哨的东西看起来就更累。除了以上推荐的三种样式以外,还有一种样式不得不说,那就是RANDQ麻是一种随机的样式,每一次打印都会在内置的样式中随机选择

22、一个,比较好玩。具体内置了几种样式,请 各位参考官网完整自己尝试输出看看。#!/usr/bin/python#*coding:utf-8*importsysfromprettytableimportPrettyTablefromprettytableimportMSWQRD_FRIENDLYfromprettytableimportPLAIN_CQLUMNSfromprettytableimportRANDOMfromprettytableimportDEFAULTreload(sys)sys.setdefaultencoding('utf8')艮 艮 艮 艮 艮 艮 艮 一二

23、八一二八 一二八一二八一二八一二八一二八务务务务务务务务务艮艮一二八一二八名称,IP 地址)01','172.16.01)03','172.16.03)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.08)07','172.16.0.7')table = Pre

24、ttyTable('table.add_row('1','server01',' table.add_row('3','server03',' table.add_row('2','server02',' table.add_row('9','server09',' table.add_row('4','server04',' table.add_row('5','

25、server05',' table.add_row('6','server06',' table.add_row('8','server08',' table.add_row('7','server07',' table.set_style(DEFAULT)print(table)B、自定义样式除了内置的样式以外,PrettyTable也提供了用户自定义,例如对齐方式,数字输出格式,边框连接符等等C、设置对齐方式align提供了用户设置对齐的方式,值有l ,

26、r, c方便代表左对齐,右对齐和居中如果不设置,默认居中对齐。D、控制边框样式在PrettyTable 中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交 叉的链接符号)如下示例:#!/usr/bin/pythonimport PrettyTable#*coding:utf-8* import sys from prettytablereload(sys)sys.setdefaultencoding('utf8')table = PrettyTable(' table.add_row('1','server01',' t

27、able.add_row('3','server03',' 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',&

温馨提示

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

评论

0/150

提交评论