1.导入PrettyTable库
需要输出中文,所以要将编码方式设为"utf-8",不同版本的设置方式不同。
在terminal中输入python --version获取当前python版本。
1)python 2.X
# 编码方式
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# 导入库
from prettytable import PrettyTable
2)python3.X-3.3
# 编码方式
import imp, sys
imp.reload(sys)
#导入库
from prettytable import PrettyTable
3)python3.4以上
# 编码方式
import importlib, sys
importlib.reload(sys)
# 导入库
from prettytable import PrettyTable
注:本文代码按照python3.9的格式编写
2.安装
prettytable库不是python的内置库,需要先安装
在项目terminal中输入pip install prettytable即可安装
3.代码示例
# 编码方式
import importlib, sys
importlib.reload(sys)
# 导入库
from prettytable import PrettyTable
# 输出
table = PrettyTable(['学号', '姓名', '年龄']) # 表头
table.add_row(['1', '张三', '14']) # 第一行
table.add_row(['2', '李四', '14']) # 第二行
table.add_row(['3', '王五', '13'])
table.add_row(['4', '郭一', '15'])
table.add_row(['5', '张二', '13'])
table.add_row(['6', '李一', '12'])
table.add_row(['7', '王三', '14'])
table.add_row(['8', '韦七', '15'])
table.add_row(['9', '戴六', '15'])
print(table)
运行结果
+------+------+------+
| 学号 | 姓名 | 年龄 |
+------+------+------+
| 1 | 张三 | 14 |
| 2 | 李四 | 14 |
| 3 | 王五 | 13 |
| 4 | 郭一 | 15 |
| 5 | 张二 | 13 |
| 6 | 李一 | 12 |
| 7 | 王三 | 14 |
| 8 | 韦七 | 15 |
| 9 | 戴六 | 15 |
+------+------+------+
如果按列表示,则使用table.add_column
4.从csv文件中添加数据
# 编码方式
import importlib, sys
importlib.reload(sys)
# 导入库
from prettytable import PrettyTable
from prettytable import from_csv
table = PrettyTable()
fp = open("file.csv", "r")
table = from_csv(fp)
print(table)
fp.close()
运行结果
+------+------+------+
| 学号 | 姓名 | 年龄 |
+------+------+------+
| 1 | 张三 | 14 |
| 2 | 李四 | 14 |
| 3 | 王五 | 13 |
| 4 | 郭一 | 15 |
| 5 | 张二 | 13 |
| 6 | 李一 | 12 |
| 7 | 王三 | 14 |
| 8 | 韦七 | 15 |
| 9 | 戴六 | 15 |
+------+------+------+
注:只能是csv文件。如果是xls文件,可以另存为csv文件。
5.选择性输出
1)输出指定列
print(table.get_string(fields=['姓名']))
输出结果
+------+
| 姓名 |
+------+
| 张三 |
| 李四 |
| 王五 |
| 郭一 |
| 张二 |
| 李一 |
| 王三 |
| 韦七 |
| 戴六 |
+------+
2)输出i-j行
print(table.get_string(start=1, end=4))
输出结果
+------+------+------+
| 学号 | 姓名 | 年龄 |
+------+------+------+
| 2 | 李四 | 14 |
| 3 | 王五 | 13 |
| 4 | 郭一 | 15 |
+------+------+------+
表头不算入,第一行输出表头。
行数从0开始
start = 1, end = 4 ,表示表格内容的第1 - 3行,即第start行计入,第end行不计入。
3)将表格切片
new_table = table[2:5].get_string(fields=['姓名'])
print(new_table)
输出结果
+------+
| 姓名 |
+------+
| 王五 |
| 郭一 |
| 张二 |
+------+
6.多种输出样式
# 编码方式
import importlib, sys
importlib.reload(sys)
# 导入库
from prettytable import PrettyTable
from prettytable import MSWORD_FRIENDLY
from prettytable import PLAIN_COLUMNS
from prettytable import RANDOM
from prettytable import DEFAULT
# 输出
table = PrettyTable(['学号', '姓名', '年龄']) # 表头
table.add_row(['1', '张三', '14']) # 第一行
table.add_row(['2', '李四', '14']) # 第二行
table.add_row(['3', '王五', '13'])
table.add_row(['4', '郭一', '15'])
table.add_row(['5', '张二', '13'])
table.add_row(['6', '李一', '12'])
table.add_row(['7', '王三', '14'])
table.add_row(['8', '韦七', '15'])
table.add_row(['9', '戴六', '15'])
table.set_style(MSWORD_FRIENDLY)
print("MSWORD_FRIENDLY")
print(table)
print()
table.set_style(PLAIN_COLUMNS)
print("PLAIN_COLUMNS")
print(table)
print()
table.set_style(RANDOM)
print("RANDOM")
print(table)
print()
table.set_style(DEFAULT)
print("DEFAULT")
print(table)
print()
输出结果
MSWORD_FRIENDLY
| 学号 | 姓名 | 年龄 |
| 1 | 张三 | 14 |
| 2 | 李四 | 14 |
| 3 | 王五 | 13 |
| 4 | 郭一 | 15 |
| 5 | 张二 | 13 |
| 6 | 李一 | 12 |
| 7 | 王三 | 14 |
| 8 | 韦七 | 15 |
| 9 | 戴六 | 15 |
PLAIN_COLUMNS
学号 姓名 年龄
1 张三 14
2 李四 14
3 王五 13
4 郭一 15
5 张二 13
6 李一 12
7 王三 14
8 韦七 15
9 戴六 15
RANDOM
''''''''''''''''''''''''''''
学号 姓名 年龄
''''''''''''''''''''''''''''
1 张三 14
2 李四 14
3 王五 13
4 郭一 15
5 张二 13
6 李一 12
7 王三 14
8 韦七 15
9 戴六 15
''''''''''''''''''''''''''''
DEFAULT
+------+------+------+
| 学号 | 姓名 | 年龄 |
+------+------+------+
| 1 | 张三 | 14 |
| 2 | 李四 | 14 |
| 3 | 王五 | 13 |
| 4 | 郭一 | 15 |
| 5 | 张二 | 13 |
| 6 | 李一 | 12 |
| 7 | 王三 | 14 |
| 8 | 韦七 | 15 |
| 9 | 戴六 | 15 |
+------+------+------+