一、简介
PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格。
二、安装
pip install prettytable
三、导入
from prettytable import PrettyTable
四、使用
# 创建表:
tb = pt.PrettyTable()
# 按行添加数据:
tb.add_row(<llist>)
# 按列添加数据:
tb.add_column(<llist>)
五、示例
(1)按行添加数据
import prettytable as pt
tb = pt.PrettyTable(['班级', '姓名', '性别', '科目', '成绩'])
# tb = pt.PrettyTable()
# tb.field_names = ['班级', '姓名', '性别', '科目', '成绩']
tb.add_row(['15级1班', '小明', '男', '语文', 120])
tb.add_row(['15级2班', '小红', '女', '英语', 98])
tb.add_row(['16级1班', '张三', '男', '数学', 143])
tb.add_row(['17级6班', '李四', '男', '数学', 130])
print(tb)
(2)按列添加数据
import prettytable as pt
tb = pt.PrettyTable()
tb.add_column('班级', ['15级1班', '15级2班', '16级1班', '17级6班'])
tb.add_column('姓名', ['小明', '小红', '张三', '李四'])
tb.add_column('性别', ['男', '女', '男', '男'])
tb.add_column('科目', ['语文', '英语', '数学', '数学'])
tb.add_column('成绩', [120, 98, 143, 130])
print(tb)
(3)注意
这里
tb = pt.PrettyTable(["班级", "姓名", "性别", "科目", "成绩"])
相当于
tb = pt.PrettyTable()
tb.field_names = ["班级", "姓名", "性别", "科目", "成绩"]
如果没有添加表头,那么会以默认的Field+编号显示,编号从1开始。
六、从csv文件添加数据
PrettyTable不仅提供了手动按行按列添加数据,也支持直接从csv文件中读取数据。
import prettytable as pt
with open('res.csv', 'r') as f:
table = pt.from_csv(fp)
print(table)
注意:csv文件不能通过xls直接重命名得到,会报错。如果是xls文件,请用另存为csv获得csv文件
七、从sql查询值添加
从数据库查询出来的数据以表格形式打印,下例使用的是sqlite3,mysql也支持。
import sqlite3
from prettytable import from_db_cursor
conn = sqlite3.connect("/sqlite.db")
cur = conn.cursor()
cur.execute("SELECT * FROM myDatabase")
table = from_db_cursor(cur)
print(table)
八、从HTML导入数据
from prettytable import from_html
html_string='''<table>
<tr>
<th>code</th>
<th>uuid</th>
<th>name</th>
<th>IP</th>
</tr>
<tr>
<td>1</td>
<td>server01</td>
<td>server-01</td>
<td>192.168.100.1</td>
</tr>
<tr>
<td>2</td>
<td>server02</td>
<td>server-02</td>
<td>192.168.100.2</td>
</tr>
</table>'''
table = from_html(html_string)
print(table[0])
导入 html 的表格,但是不一样的地方是 print 语句,使用 html 表格导入数据的时候 print 的必须是列表中的第一个元素,否则有可能会报[<prettytable.PrettyTable object at 0x7fa87feba590>]
这样的错误。
九、选择性输出
有选择的输出某些特定的行。
## 输出指定的列
print(table.get_string(fields=["Area", "Population"]))
## 输出指定的行,start 和 end 参数可以自由控制显示区间
print(table.get_string(start = 0, end = 2))
## 将表格切片
new_table = table[0:2]
print(new_table)
## 输出排序
print(table.get_string(sortby="City name", reversesort=True))
## 其中 reversesort 指定了是否倒序排序,默认为 False,即默认正序列排序。sortby 指定了排序的字段。