Python prettytable模块应用详解
作者:A-L-Kun 发布时间:2022-05-11 13:10:15
一、简介
1、概述
因为信息是展现在命令行中的,众所周知,命令行展现复杂的文本看起来着实累人,于是就想着能像表格那样展示,那看起来就舒服多了。
prettytable库就是这么一个工具,prettytable可以打印出美观的表格,并且对中文支持相当好(如果有试图自己实现打印表格,你就应该知道处理中文是多么的麻烦)
2、安装
prettytable并非python的内置库,通过pip install prettytable
即可安装。
3、实例
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age']) # 实例化对象
"""
# 效果一样
table = PrettyTable()
table.field_names = ["index", "name", 'age']
"""
table.add_rows([ # 添加行
[1, "Milk", "12"],
[2, "Lili", "34"]
])
print(table) # 把表格输出
二、添加数据
1、直接添加
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
# 方式一
table = PrettyTable(["index", "name", 'age']) # 实例化对象
table.add_rows([ # 添加行
[1, "Milk", "12"],
[2, "Lili", "34"]
])
print(table)
# 方式二
table_ = PrettyTable()
table_.add_column('index', ['1', '2']) # 直接添加每一列的数据
table_.add_column('name', ['Milk', 'Lili'])
table_.add_column('age', ['12', '34'])
print(table_)
del_row
方法采用要删除的单行的整数索引。del_column
方法采用要删除的单个列的字段名称。clear_rows
方法不接受任何参数并删除表中的所有行 - 但保持字段名称不变,以便您可以使用相同类型的数据重新填充它。clear
方法不接受任何参数并删除所有行和所有字段名称。但是,这与创建一个新的表实例并不完全相同 - 与样式相关的设置将被保留。
2、文件读取
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import json
from prettytable import from_csv, from_json, from_html
# 从CSV文件中读取
table = from_csv(open("test.csv", "r", encoding="utf-8")) # 注意,要打开文件
print(table)
# 从JSON字符串中读取
data = [["name", "age"], {"name": "r", "age": 23}, {"name": "d", "age": 25}, {"name": "a", "age": 24}] # 注意,要将第一个数据作为字段
table = from_json(json.dumps(data))
print(table)
# 从html代码中读取
html = """
<table>
<tr>
<th>序号</th><th>姓名</th><th>年龄</th>
</tr>
<tr>
<td>1</td><td>a</td><td>23</td>
</tr>
<tr>
<td>2</td><td>b</td><td>24</td>
</tr>
</table>
"""
table = from_html(html)
print(table)
3、数据库
还可以通过数据库的游标来进行读取
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
import sqlite3
from prettytable import from_db_cursor
# 从数据库游标中读取
conn = sqlite3.connect("USERINFO.db")
cur = conn.cursor()
cur.execute("SELECT * FROM res")
table = from_db_cursor(cur)
print(table)
三、输出方式
1、全部输出
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
[1, "Milk", "12"],
[2, "Lili", "34"]
])
print(table) # 把表格输出
print(table.get_html_string()) # 输出表格的html样式,还可以输出csv, json, latex
2、选择性输出
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
[1, "Milk", "12"],
[2, "Lili", "34"],
[3, "Lili1", "35"]
])
print(table[0: 2]) # 切片输出,输出前2行 print(table.get_string(start=0, end=2))
print(table.get_string(fields=["name", "age"])) # 只输出姓名和年龄对应的列
print(table.get_string(sortby="age", reversesort=True)) # 根据年龄进行降序排序,默认为True,升序排序
四、输出样式
1、内置样式
通过set_style()可以设置表格样式,prettytable内置了多种的样式个人觉得MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT 这三种样式看起来比较清爽,在终端下显示表格本来看起就很累,再加上一下花里胡哨的东西看起来就更累。
除了以上推荐的三种样式以外,还有一种样式不得不说,那就是RANDOM,这是一种随机的样式,每一次打印都会在内置的样式中随机选择一个,比较好玩。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
from prettytable import MSWORD_FRIENDLY # 电子文档模式
from prettytable import PLAIN_COLUMNS # 普通文本模式
from prettytable import RANDOM # 随机样式
from prettytable import DEFAULT # 默认样式
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
[1, "Milk", "12"],
[2, "Lili", "34"],
[3, "Lili1", "35"]
])
# table.set_style(MSWORD_FRIENDLY)
# table.set_style(PLAIN_COLUMNS)
table.set_style(RANDOM)
print(table)
DEFAULT
- 默认外观,用于撤消您可能所做的任何样式更改PLAIN_COLUMNS
- 一种无边框样式,适用于柱状数据的命令行程序MARKDOWN
- 遵循 Markdown 语法的样式ORGMODE
- 适合Org 模式语法的表格样式SINGLE_BORDER
和DOUBLE_BORDER
- 使用带有方框图字符的连续单/双边框线的样式,以便在终端上进行更精美的显示
2、自定义样式
具体配置样式,请到官网查看:传送门
对齐: align提供了用户设置对齐的方式,值有l,r,c方便代表左对齐,右对齐和居中 如果不设置,默认居中对齐。
边框样式: 在PrettyTable中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交叉的链接符号)
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo02.py"
__email__ = "liu.zhong.kun@foxmail.com"
from prettytable import PrettyTable
table = PrettyTable(["index", "name", 'age'])
table.add_rows([
[1, "Milk", "12"],
[2, "Lili", "34"],
[3, "Lili1", "35"]
])
table.border = True # 是否显示边框
table.junction_char = '+' # 绘制线连接的单个字符
table.horizontal_char = '~' # 水平连接线的字符
table.vertical_char = '*' # 垂直线连接的字符
print(table)
这是库的大概使用方法,具体请参考官方网站的内容。
来源:https://blog.csdn.net/qq_62789540/article/details/126039567
猜你喜欢
- 写出能用的代码很简单,写出好用的代码很难。好用的代码,也都会遵循一此原则,这就是设计原则,它们分别是:单一职责原则 (SRP)开闭原则 (O
- 1. 起因当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行。这时候试想,如果你在服务器
- opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到
- 在北美,人们对于 PostgreSQL 的热情不断升温。随着 PostgreSQL 的发展, PostgreSQL 8.x 已经从技术上超越
- 阅读文本前请参考此文章的数据表结构Django提供了两个非常有用的工具:F对象和Q对象,方便了在一些特殊场景下的查询过程。1.F对象查询F对
- 一.背景一道ctf题,通过破解2048游戏获得flag游戏的规则很简单,需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成
- 问题背景:这个问题是在爬取某夕夕商城遇到的问题,原本的方案是用selenium + chromedriver + mitmproxy开心的刷
- 在使用pytorch框架时,难免要自己定义网络。于是,super(XXXX, self).init(),就成了自定义网络结构时必不可少的第一
- Tensorboard详解该类在存放在keras.callbacks模块中。拥有许多参数,主要的参数如下:1、log_dir: 用来保存Te
- 本文实例讲述了Python验证码识别的方法。分享给大家供大家参考。具体实现方法如下:#encoding=utf-8import Image,
- 什么是错误页面?是指链接指向的网页现在失效了,原因可能是用户输错了地址,也可能是网站结构调整,内容删除,或者地址变更都有可能出现这种情况。那
- 本文实例分析了Go语言共享内存读写的方法。分享给大家供大家参考。具体分析如下:前面分析了Go语言指针运算和内嵌C代码的方法,做了一个Go语言
- Vue加载流程1.初始化的第一阶段是Vue实例也就是vm对象创建前后:首先Vue进行生命周期,事件初始化发生在beforeCreate生命周
- 由于本人使用的是Android设备做自动化测试,所以以下内容均基于Android系统做出的整理一、启动app启动app需要设置Capabil
- 我们在使用GPU资源进行训练的时候,可能会发生资源耗尽的情况,那么在在这种情况,我们需要对GPU的资源进行合理的安排,具体使用办法如下:框架
- 概述Go 的并发模型与其他语言不同,虽说它简化了并发程序的开发难度,但如果不了解使用方法,常常会遇到 goroutine 泄露的问题。虽然
- 第一种: <script language=”javascript” type=”text/javascript”> windo
- 导航设计是结构层面设计中的主要工作之一,在软件中,导航设计的好坏,直接关系到用户使用是否能够流畅。面对较复杂的导航,我们第一反应是将其简化。
- 上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下
- 1、利用key排序d = {'d1':2, 'd2':4, 'd4':1,'d3