prettytable:像数据库一样格式化输出内容
时间:2020-03-23
本文章向大家介绍prettytable:像数据库一样格式化输出内容,主要包括prettytable:像数据库一样格式化输出内容使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
楔子
记得MySQL吗?如果在MySQL命令行查询的话,会以如下的形式进行展示。
同理,prettytable就是用来将数据按照上述形式进行输出的,我们来看一下用法。
添加表头、添加行、添加列
类似于数据库中的表,有表头、或者说字段名,以及每一行的内容。
from prettytable import PrettyTable
# 传入的["姓名", "年龄", "出处"]相当于表头
tb = PrettyTable(["姓名", "年龄", "出处"])
# 调用add_row添加行记录
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# 打印
print(tb)
"""
+------------+------+------------------+
| 姓名 | 年龄 | 出处 |
+------------+------+------------------+
| 牧濑红莉栖 | 20 | 命运石之门 |
| 古明地觉 | 16 | 东方地灵殿 |
| 椎名真白 | 18 | 樱花庄的宠物女孩 |
| 坂上智代 | 18 | Clannad |
| 雨宫优子 | 16 | 悠久之翼 |
+------------+------+------------------+
"""
当然我们还可以添加一列。
from prettytable import PrettyTable
tb = PrettyTable()
# 指定表头还可以通过tb.field_names单独指定
tb.field_names = ["姓名", "年龄", "出处"]
# 调用add_row添加行记录
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# 调用add_column添加一列:列名、数据
tb.add_column("性别", ["女"] * 5)
# 打印
print(tb)
"""
+------------+------+------------------+------+
| 姓名 | 年龄 | 出处 | 性别 |
+------------+------+------------------+------+
| 古明地觉 | 16 | 东方地灵殿 | 女 |
| 椎名真白 | 18 | 樱花庄的宠物女孩 | 女 |
| 坂上智代 | 18 | Clannad | 女 |
| 雨宫优子 | 16 | 悠久之翼 | 女 |
| 牧濑红莉栖 | 20 | 命运石之门 | 女 |
+------------+------+------------------+------+
"""
从数据源中导入数据
prettytable支持从csv、数据库、html等数据源中导入数据。但是说实话,从数据源读取数据我们一般使用pandas,并且还会伴随着数据处理。而使用prettytable一般是为了使得程序中输出的某些信息(比如日志信息)
更好的展示。如果只是展示读取的文件内容,还不如用Excel、Navicat等工具查看呢。
import pymysql
from prettytable import from_csv
from prettytable import from_db_cursor
# 从csv中读取数据
with open("xxx.csv") as f:
tb = from_csv(f)
print(tb)
# 从数据库中读取数据
conn = pymysql.connect()
cursor = conn.cursor()
cursor.execute("select * from t")
tb = from_db_cursor(cursor)
print(tb)
可以创建数据集进行查看
输出指定行、指定列
我们也可以输出table的指定行、指定列
from prettytable import PrettyTable
tb = PrettyTable()
tb.field_names = ["姓名", "年龄", "出处"]
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# fields用于选择输出的列,start和end用于选择输出的开始行和结束行
print(tb.get_string(fields=["姓名", "年龄"], start=1, end=3))
"""
+----------+------+
| 姓名 | 年龄 |
+----------+------+
| 椎名真白 | 18 |
| 坂上智代 | 18 |
+----------+------+
"""
# 此外可以用来进行排序
print(tb.get_string(sortby="年龄", reversesort=True))
"""
+------------+------+------------------+
| 姓名 | 年龄 | 出处 |
+------------+------+------------------+
| 牧濑红莉栖 | 20 | 命运石之门 |
| 椎名真白 | 18 | 樱花庄的宠物女孩 |
| 坂上智代 | 18 | Clannad |
| 雨宫优子 | 16 | 悠久之翼 |
| 古明地觉 | 16 | 东方地灵殿 |
+------------+------+------------------+
"""
说实话,也不常用。与其选择性输出,还不如一开始就不要。
设置表格样式
可以通过set_style设置样式
from prettytable import PrettyTable
import prettytable
tb = PrettyTable()
# 指定表头还可以通过tb.field_names单独指定
tb.field_names = ["姓名", "年龄", "出处"]
# 调用add_row添加行记录
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# 表格样式有以下几种:DEFAULT、MSWORD_FRIENDLY、PLAIN_COLUMNS、RANDOM
# 我们之前的就是DEFAULT
tb.set_style(prettytable.MSWORD_FRIENDLY)
print(tb)
"""
| 姓名 | 年龄 | 出处 |
| 古明地觉 | 16 | 东方地灵殿 |
| 椎名真白 | 18 | 樱花庄的宠物女孩 |
| 坂上智代 | 18 | Clannad |
| 雨宫优子 | 16 | 悠久之翼 |
| 牧濑红莉栖 | 20 | 命运石之门 |
"""
tb.set_style(prettytable.PLAIN_COLUMNS)
print(tb)
"""
姓名 年龄 出处
古明地觉 16 东方地灵殿
椎名真白 18 樱花庄的宠物女孩
坂上智代 18 Clannad
雨宫优子 16 悠久之翼
牧濑红莉栖 20 命运石之门
"""
tb.set_style(prettytable.RANDOM)
print(tb)
"""
古明地觉 16 东方地灵殿
椎名真白 18 樱花庄的宠物女孩
坂上智代 18 Clannad
雨宫优子 16 悠久之翼
牧濑红莉栖 20 命运石之门
"""
说实话,还是默认的DEFAULT最好看
设置对齐方式
from prettytable import PrettyTable
tb = PrettyTable()
# 指定表头还可以通过tb.field_names单独指定
tb.field_names = ["姓名", "年龄", "出处"]
# 调用add_row添加行记录
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# l代表左对齐,c代表居中,r代表右对齐
tb.align["姓名"] = "l"
tb.align["年龄"] = "c"
tb.align["出处"] = "r"
print(tb)
"""
+------------+------+------------------+
| 姓名 | 年龄 | 出处 |
+------------+------+------------------+
| 古明地觉 | 16 | 东方地灵殿 |
| 椎名真白 | 18 | 樱花庄的宠物女孩 |
| 坂上智代 | 18 | Clannad |
| 雨宫优子 | 16 | 悠久之翼 |
| 牧濑红莉栖 | 20 | 命运石之门 |
+------------+------+------------------+
"""
设置边框样式
在 PrettyTable 中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交叉的链接符号)
from prettytable import PrettyTable
tb = PrettyTable()
# 指定表头还可以通过tb.field_names单独指定
tb.field_names = ["姓名", "年龄", "出处"]
# 调用add_row添加行记录
tb.add_row(["古明地觉", 16, "东方地灵殿"])
tb.add_row(["椎名真白", 18, "樱花庄的宠物女孩"])
tb.add_row(["坂上智代", 18, "Clannad"])
tb.add_row(["雨宫优子", 16, "悠久之翼"])
tb.add_row(["牧濑红莉栖", 20, "命运石之门"])
# 是否显示边框,默认为True
tb.border = True
# 横边框
tb.horizontal_char = '^'
# 竖边框
tb.vertical_char = '>'
# 边框连接符
tb.junction_char='~'
print(tb)
"""
~^^^^^^^^^^^^~^^^^^^~^^^^^^^^^^^^^^^^^^~
> 姓名 > 年龄 > 出处 >
~^^^^^^^^^^^^~^^^^^^~^^^^^^^^^^^^^^^^^^~
> 古明地觉 > 16 > 东方地灵殿 >
> 椎名真白 > 18 > 樱花庄的宠物女孩 >
> 坂上智代 > 18 > Clannad >
> 雨宫优子 > 16 > 悠久之翼 >
> 牧濑红莉栖 > 20 > 命运石之门 >
~^^^^^^^^^^^^~^^^^^^~^^^^^^^^^^^^^^^^^^~
"""
我们看到以上的所有示例,貌似输出的都不是很规整啊。其实这是因为我们输出的中文,如果是英文,那么会输出的很漂亮。
from prettytable import PrettyTable
tb = PrettyTable()
# 指定表头还可以通过tb.field_names单独指定
tb.field_names = ["name", "age", "where"]
# 调用add_row添加行记录
tb.add_row(["komeiji satori", 16, "touhou project"])
tb.add_row(["shiina mashiro", 18, "sakurasou"])
tb.add_row(["sakaue tomoyo", 18, "Clannad"])
tb.add_row(["amamiya yuuko", 16, "ef"])
tb.add_row(["makise kurisu", 20, "steins;gate"])
print(tb)
"""
+----------------+-----+----------------+
| name | age | where |
+----------------+-----+----------------+
| komeiji satori | 16 | touhou project |
| shiina mashiro | 18 | sakurasou |
| sakaue tomoyo | 18 | Clannad |
| amamiya yuuko | 16 | ef |
| makise kurisu | 20 | steins;gate |
+----------------+-----+----------------+
"""
原文地址:https://www.cnblogs.com/traditional/p/12555075.html
- python爬虫beautifulsoup4系列1
- 区块链入门教程
- python爬虫beautifulsoup4系列2
- python爬虫beautifulsoup4系列3
- 多元回归模型
- C++ STL之min_element()与max_element()(取容器中的最大最小值)
- RESTful API 设计最佳实践
- python爬虫beautifulsoup4系列4-子节点
- 元胞自动机实现多数分类算法
- 51Nod 1289 大鱼吃小鱼(模拟,经典好题)
- 用Metaclass实现一个精简的ORM框架
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- Selenium2+python自动化63-二次封装(click/send_kesy)
- Selenium2+python自动化65-js定位几种方法总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法