python编写⼀个4⾏4列的表格_5个案例让Python输出漂亮的
表格!
来源 | Python数据之道
前⾔
最近在⽤python写⼀个⼩⼯具,这个⼯具主要就是⽤来管理各种资源的信息,⽐如阿⾥云的ECS等信息,因为我⼯作的电脑使⽤的是LINUX,所以就想着⽤ Python写⼀个命令⾏的管理⼯具,基本的功能就是同步阿⾥云的资源的信息到数据库,然后可以使⽤命令⾏查询。
因为信息是展现在命令⾏中的,众所周知,命令⾏展现复杂的⽂本看起来着实累⼈,于是就想着能像表格那样展⽰,那看起来就舒服多了。
prettytable库就是这么⼀个⼯具,prettytable可以打印出美观的表格,并且对中⽂⽀持相当好(如果有试图⾃⼰实现打印表格,你就应该知道处理中⽂是多么的⿇烦)说明:本⽂使⽤Markdown语法编写,为了展⽰⽅便,以及复制⽅便,所以本⽂中没有使⽤截图,因为格式控制的问题,⽂章中的运⾏结果会出现⼀些分割线的偏移,在终端中呈现并此问题,请各位⼿动去操作验证。
安装
prettytable并⾮python的内置库,通过 pip install prettytable即可安装。
⼀个⼩⽰例
我们先来看⼀个⽰例:#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
reload(sys)
sys.setdefaultencoding('utf8')
table = PrettyTable(['编号','云编号','名称','IP地址'])
table.add_row(['1','server01','服务器01','172.16.0.1'])
table.add_row(['2','server02','服务器02','172.16.0.2'])
table.add_row(['3','server03','服务器03','172.16.0.3'])
table.add_row(['4','server04','服务器04','172.16.0.4'])
table.add_row(['5','server05','服务器05','172.16.0.5'])
table.add_row(['6','server06','服务器06','172.16.0.6'])
table.add_row(['7','server07','服务器07','172.16.0.7'])
table.add_row(['8','server08','服务器08','172.16.0.8'])
table.add_row(['9','server09','服务器09','172.16.0.9'])
print(table)
以上⽰例运⾏结果如下:linuxops@deepin:~$ python p.py
+------+----------+----------+------------+
| 编号 | 云编号 | 名称 | IP地址 |
+------+----------+----------+------------+
| 1 | server01 | 服务器01 | 172.16.0.1 |
| 2 | server02 | 服务器02 | 172.16.0.2 |
| 3 | server03 | 服务器03 | 172.16.0.3 |
| 4 | server04 | 服务器04 | 172.16.0.4 |
| 5 | server05 | 服务器05 | 172.16.0.5 |
| 6 | server06 | 服务器06 | 172.16.0.6 |
| 7 | server07 | 服务器07 | 172.16.0.7 |
| 8 | server08 | 服务器08 | 172.16.0.8 |
| 9 | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+
在以上的⽰例中,我们通过form导⼊了表格库。table实例化了⼀个表格库,并且添加了['编号','云编号','名称','IP地址']为表头,如果没有添加表头,那么会以默认的Field+编号显⽰,例如:+---------+----------+----------+------------+
| Field 1 | Field 2 | Field 3 | Field 4 |
+---------+----------+----------+------------+
所以为更直观看出每⼀列的意义,还是要添加表头的。
添加数据
prettytable提供了多种的添加数据的⽅式,最常⽤的应该就是按⾏按列添加数据了。
A、按⾏添加数据 table.add_row
在上⾯简单的⽰例中,我们就是按⾏添加数据的。
添加的数据必须要是列表的形式,⽽且数据的列表长度要和表头的长度⼀样。在实际的使⽤中,我们应该要关注到添加的数据是否和表头对应,这⼀点很重要。
B、按列添加数据 table.add_column()
看下⾯的⽰例:#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
reload(sys)
sys.setdefaultencoding('utf8')
table = PrettyTable()
table.add_column('项⽬', ['编号','云编号','名称','IP地址'])
table.add_column('值', ['1','server01','服务器01','172.16.0.1'])
print(table)
运⾏结果如下:+-------+--------+------------+
| index | 项⽬ | 值 |
+-------+--------+------------+
| 1 | 编号 | 1 |
| 2 | 云编号 | server01 |
| 3 | 名称 | 服务器01 |
| 4 | IP地址 | 172.16.0.1 |
+-------+--------+------------+
以上⽰例中,我们通过add_column来按列添加数据,按列添加数据不需要在实例化表格的时候制定表头,它的表头是在添加列的时候指定的。
table.add_column('项⽬', ['编号','云编号','名称','IP地址']) 这⼀⾏代码为例,项⽬指定了这个列的表头名为"项⽬",['编号','云编号','名称','IP 地址']为列的值,同样为列表。
C、从csv⽂件添加数据
PrettyTable不仅提供了⼿动按⾏按列添加数据,也⽀持直接从csv⽂件中读取数据。#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_csv
reload(sys)
sys.setdefaultencoding('utf8')
table = PrettyTable()
fp = open("res.csv", "r")
table = from_csv(fp)
print(table)
fp.close()
如果要读取cvs⽂件数据,必须要先导⼊from_csv,否则⽆法运⾏。上⾯的⽰例运⾏结果如下:+------+----------+----------+------------+
| 编号 | 云编号 | 名称 | IP地址 |
+------+----------+----------+------------+
| 1 | server01 | 服务器01 | 172.16.0.1 |
| 2 | server02 | 服务器02 | 172.16.0.2 |
| 3 | server03 | 服务器03 | 172.16.0.3 |
| 4 | server04 | 服务器04 | 172.16.0.4 |
| 5 | server05 | 服务器05 | 172.16.0.5 |
| 6 | server06 | 服务器06 | 172.16.0.6 |
| 7 | server07 | 服务器07 | 172.16.0.7 |
| 8 | server08 | 服务器08 | 172.16.0.8 |
| 9 | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+csv⽂件不能通过xls直接重命名得到,会报错。如果是xls⽂件,请⽤另存为csv获得csv⽂件
D、从sql查询值添加
从数据库查询出来的数据可以直接导⼊到表格打印,下⾯的例⼦使⽤了sqlite3,如果使⽤的是mysql也是⼀样的,只要能查询到数据就能导⼊到表格中#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_db_cursor
import sqlite3
reload(sys)
sys.setdefaultencoding('utf8')html表格元素
conn = t("/tmp/aliyun.db")
cur = conn.cursor()
table = from_db_cursor(cur)
print(table)
运⾏结果如下:+------+----------+----------+------------+
| 编号 | 云编号 | 名称 | IP地址 |
+------+----------+----------+------------+
| 1 | server01 | 服务器01 | 172.16.0.1 |
| 2 | server02 | 服务器02 | 172.16.0.2 |
| 3 | server03 | 服务器03 | 172.16.0.3 |
| 4 | server04 | 服务器04 | 172.16.0.4 |
| 5 | server05 | 服务器05 | 172.16.0.5 |
| 6 | server06 | 服务器06 | 172.16.0.6 |
| 7 | server07 | 服务器07 | 172.16.0.7 |
| 8 | server08 | 服务器08 | 172.16.0.8 |
| 9 | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+
E、从HTML导⼊数据
⽀持从html的表格中导⼊,请看下⾯这个例⼦:#!/usr/bin/python
#**coding:utf-8**
import sys
from prettytable import PrettyTable
from prettytable import from_html
reload(sys)
sys.setdefaultencoding('utf8')
html_string='''
编号
云编号
名称
IP地址
1
server01
服务器01
172.16.0.1
2
server02
服务器02
172.16.0.2
'''
table = from_html(html_string)
print(table[0])
运⾏结果如下:+------+----------+----------+------------+
| 编号 | 云编号 | 名称 | IP地址 |
+------+----------+----------+------------+
| 1 | server01 | 服务器01 | 172.16.0.1 |
| 2 | server02 | 服务器02 | 172.16.0.2 |
+------+----------+----------+------------+
如上⽰例中,我们可以导⼊html的表格,但是不⼀样的地⽅是print语句,使⽤html表格导⼊数据的时候print的必须是列表中的第⼀个元素,否则有可能会报[]这样的错误。
这是因为table并不是PrettyTable对象,⽽是包含单个PrettyTable对象的列表,它通过解析html⽽来,所以⽆法直接打印table,⽽需要打印table[0]
表格输出格式
正如⽀持多种输⼊⼀样,表格的输出也⽀持多种格式,我们在上⾯中的例⼦中已经使⽤了print的⽅式输出,这是⼀种常⽤的输出⽅式。
A、print
直接通过print打印出表格。这种⽅式打印出的表格会带边框。
B、输出HTML格式的表格
_html_string())可以打印出html标签的表格。
在上⾯的例⼦中,使⽤_html_string())会打印出如下结果:
编号

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。