▼点击下方卡片关注我
▲点击上方卡片关注我
处理数据时,直接打印列表或字典常常杂乱无章,让人头大。Python里有个好东西 - prettytable ,专门用来搞定表格式输出,分分钟就能把数据整理得整整齐齐的。不管是做数据分析还是写命令行工具,这都是个特别好使的模块。
安装配置
直接用pip装就行:
1pip install prettytable
基础用法
来看个最简单的例子:
1from prettytable import PrettyTable
3# 创建表格对象
4table = PrettyTable()
6# 设置表头
7table.field_names = [“名字”, “年龄”, “城市”]
9# 添加数据
10table.add_row([“小明”, 18, “北京”])
11table.add_row([“小红”, 20, “上海”])
12table.add_row([“小张”, 19, “广州”])
14print(table)
输出效果:
asciidoc
1+--------+------+--------+
2| 名字 | 年龄 | 城市 |
3+--------+------+--------+
4| 小明 | 18 | 北京 |
5| 小红 | 20 | 上海 |
6| 小张 | 19 | 广州 |
7+--------+------+--------+
瞧瞧,数据立马变得清清爽爽的。
⚠️ 小贴士:
- 表头用field_names设置,得是list类型
- add_row添加数据时要跟表头数量对应上
- 中文显示没问题,自动对齐
花式定制
这表格还能玩出花来:
1table = PrettyTable()
2table.field_names = [“商品”, “价格”, “库存”]
4# 设置对齐方式
5table.align[“商品”] = “l” # 左对齐
6table.align[“价格”] = “r” # 右对齐
7table.align[“库存”] = “c” # 居中
9# 添加数据
10table.add_row([“笔记本电脑”, 4999, 50])
11table.add_row([“鼠标”, 99, 200])
12table.add_row([“键盘”, 299, 100])
14# 设置表格样式
15table.border = True # 显示边框
16table.header = True # 显示表头
17table.padding_width = 2 # 填充宽度
19print(table)
从列表导入
要是数据本来就是列表格式的,还能直接导进去:
1data = [
2[“手机”, 2999, “已售罄”],
3[“平板”, 3999, “有货”],
4[“耳机”, 999, “有货”]
5]
7table = PrettyTable()
8table.field_names = [“商品”, “价格”, “状态”]
9table.add_rows(data) # 注意这里是add_rows,不是add_row
11print(table)
⚠️ 小贴士:
- add_row和add_rows不一样,一个加单行,一个加多行
- 从列表导入超方便,但得保证数据格式统一
排序显示
数据也能排序,简直不要太爽:
1table = PrettyTable()
2table.field_names = [“商品”, “销量”, “评分”]
3table.add_row([“商品A”, 100, 4.5])
4table.add_row([“商品B”, 200, 4.2])
5table.add_row([“商品C”, 150, 4.8])
7# 按销量排序
8print(“按销量排序:”)
9table.sortby = “销量”
10print(table)
12# 按评分逆序排序
13print(“\n按评分逆序排序:”)
14table.sortby = “评分”
15table.reversesort = True
16print(table)
⚠️ 小贴士:
- sortby指定排序字段,必须是表头中有的
- reversesort设为True就是降序,False就是升序
- 数字类型会自动按大小排,字符串按字母顺序排
实际开发中经常要处理各种数据,用prettytable搞定表格输出分分钟的事。不过要记得,这玩意主要是用来展示,不是用来处理数据的,数据处理还是得用pandas这些专业工具。
⚠️ 小贴士:
- 表格宽度会自动适应内容
- 中文字符可能需要额外考虑对齐问题
- 数据量特别大的时候性能会差点
- 输出到文件记得用UTF-8编码
代码写好了,下回查数据库或者写报表,就能把数据显示得特别清爽了。
往期回顾
点赞分享
让钱和爱流向你