1.PrettyTable 是什么
PrettyTable是用于生成简单ASCII表的Python库。 它的灵感来自PostgreSQL外壳程序psql中使用的ASCII表。 ... PrettyTable可以从CSV,HTML或数据库光标读取数据,并以ASCII或HTML输出数据
为什么会用它呢?因为想用Python输出一些数据,用表格的形式,看起来比较好看.
安装: pip install prettytable
先来个简单的例子:
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["省份", "城市", "邮编", "介绍"]
x.add_row(["广东省", "广州市", 510000, "广东省省会"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])
x.add_row(["湖南省", "长沙市", 410000, "湖南省省会"])
x.add_row(["湖北省", "武汉市", 430000, "湖北省省会"])
x.add_row(["福建省", "福州市", 350000, "福建省省会"])
print(x)
+--------+--------+--------+------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+------------+
| 广东省 | 广州市 | 510000 | 广东省省会 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
| 湖南省 | 长沙市 | 410000 | 湖南省省会 |
| 湖北省 | 武汉市 | 430000 | 湖北省省会 |
| 福建省 | 福州市 | 350000 | 福建省省会 |
+--------+--------+--------+------------+
上面就是简单的通过add_row的方法来展示,大家可以根据自己的需求,遍历数据后add row 即可了.
当然也有人可能希望时候,我能不能按列来加数据,当然可以了,上个例子:
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
column_names = ["省份", "城市", "邮编", "介绍"]
x.add_column(column_names[0], ["广东省", "四川省", "湖南省", "湖北省", "福建省"])
x.add_column(column_names[1], ["广州市","成都市","长沙市","武汉市","福州市" ])
x.add_column(column_names[2], [510000, 610000, 410000, 430000, 350000])
x.add_column(column_names[3], ["广东省省会","四川省省会","湖南省省会","湖北省省会","福建省省会"])
print(x)
+--------+--------+--------+------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+------------+
| 广东省 | 广州市 | 510000 | 广东省省会 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
| 湖南省 | 长沙市 | 410000 | 湖南省省会 |
| 湖北省 | 武汉市 | 430000 | 湖北省省会 |
| 福建省 | 福州市 | 350000 | 福建省省会 |
+--------+--------+--------+------------+
可以看到,一样的效果,所以大家根据自己数据情况来决定用哪个方式即可了.
从上面2个例子来看,我们可能列得数据还不是很长,我们换个文字比较多的,看看效果.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["省份", "城市", "邮编", "介绍"]
x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
+--------+--------+--------+------------------------------------------------------------------+
从上面可以看出来,默认内容都是居中的,那如果我们希望设置靠左或者是靠右的话,怎么配置了.
这个可以设置针对单个列的也可以全局设置.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable(["省份", "城市", "邮编", "介绍"],align='l')
x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
+--------+--------+--------+------------------------------------------------------------------+
这里就是使用了align的配置来让内容靠左,如果需要靠右,就把l 换成r即可了.就是因为的left and right.居中就是c (center)
可能到这里,有人会说,我只需要设置某些列就可以了,不需要全部.那也很简单.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable(["省份", "城市", "邮编", "介绍"])
x.align["介绍"] = 'r'
x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
+--------+--------+--------+------------------------------------------------------------------+
关于内容的位置以及简单的一个使用上面已经完成了.下面来看一下一些别的功能.
PrettyTable有许多样式选项,可控制表格显示方式的各个方面.
1.打印指定的列或行
print (x.get_string(fields=["省份", "城市"])) #指定列
print (x.get_string(start=1,end=2)) #指定从哪里开始到哪里结束的行
2.排序(单列或多列)
print (x.get_string(sortby="邮编",reversesort=True)) #按邮编单列倒序打印
#这里的operator.itemgetter(0, 1) 代表第0列跟第1列,即是省份跟城市,后面定义sortby是城市,意思是先按城市排序,后按省份排序.
print (x.get_string(sort_key=operator.itemgetter(0, 1), sortby="城市"))
3.取消边框-border
x.border = False #默认值是True
4.不显示标题
x.header = False #默认值是True
- 设置边框显示的类型.具体效果看个人需要尝试不同类型即可.
x.hrules = NONE #设置水平线的,可以取值:FRAME, HEADER, ALL, NONE
x.vrules = NONE #设置垂直线可以取值:FRAME, HEADER, ALL, NONE
6.控制两侧的空格数
x.padding_width = 6 # 这个只有在下面这2个没设置的情况下才生效.
x.left_padding_width = 5
x.right_padding_width = 4
7.关于表格的边框用什么样式,默认就是-|+这3个来组成,但是也可以根据自己的需求来定制样式的.
x.vertical_char = '*' # Single character string used to draw vertical lines. > > Default is |.
x.horizontal_char = '?' # Single character string used to draw horizontal lines. > > Default is -.
x.junction_char = '#' # Single character string used to draw line junctions. > > Default is +.
8.补充使用方式,上面的设置只是其中一种方式,也可以用另外一种方式定义.
x = PrettyTable(border=False, header=False, padding_width=5)
9.关于换行,这个需求不一定每个表格的数据都需要,如果是有些描述比较长,然后我们没有处理换行的话,出来的表格会非常丑.下面给个例子:
上面就是没换行的效果.那我们可以通过使用一个很简单的方式,让这个变得非常好看.
from textwrap import fill
x.add_row(["四川省", "成都市", 610000, fill("四川省省会",width=100)])
+--------+--------+--------+----------------------------------------------------------------------------------+
| 省份 | 城市 | 邮编 | 介绍 |
+--------+--------+--------+----------------------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常广东省省会非常好广东省省会非常好广东省省会非常好广 |
| | | | 东省省会非广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非广东省省会 |
| | | | 非常好广东省省会非常好广东省省会非常好广东省省会非好广东省省会非常好广东省省会非 |
| | | | 常好 |
| 四川省 | 成都市 | 610000 | 四川省省会 |
+--------+--------+--------+----------------------------------------------------------------------------------+
经过上面的设置之后,表格会根据设置的宽度自动换行.格式看起来有点对不齐,是这里粘贴的问题哈.最终的效果是对齐的.
10.最后上个改变颜色的例子.
from prettytable import PrettyTable
#Color
R = "\033[0;31;40m" #RED
G = "\033[0;32;40m" # GREEN
Y = "\033[0;33;40m" # Yellow
B = "\033[0;34;40m" # Blue
N = "\033[0m" # Reset
a = "ok"
b = "Failed"
t = PrettyTable(['Input', 'status'])
#Adding Both example in table
t.add_row(['FAN', G+a+N])
t.add_row(['FAN', R+b+N])
print (t)
以上简单介绍了表格常用的一些样式设置,具体的请参考官方网站