python 库 PrettyTabble 使用与错误
参考链接:http://zetcode.com/python/prettytable/
PrettyTable能在python中生成ASCII 表,可以使用他控制表的很多方面,包括文本对齐、表的边框、列的宽度、对数据进行排序、选择在最后的输出中显示制定的行或者列
支持从CSV、HTML、数据库游标中导入数据,能输出数据到ASCII 或者HTML
安装
pip install pTable
使用
产生一个表(通过add_row()),不用指定数据类型
from prettytable import PrettyTable x = PrettyTable()#第一步创建对象 x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]#设置表头名称 #通过 add_row()方法创建一个表 x.add_row(["Adelaide", 1295, 1158259, 600.5]) x.add_row(["Brisbane", 5905, 1857594, 1146.4]) x.add_row(["Darwin", 112, 120900, 1714.7]) x.add_row(["Hobart", 1357, 205556, 619.5]) x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) print(x)
$ ./create_by_row.py +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | | Sydney | 2058 | 4336374 | 1214.8 | | Melbourne | 1566 | 3806092 | 646.9 | | Perth | 5386 | 1554769 | 869.4 | +-----------+------+------------+-----------------+
产生一个表(通过add_column())#也是先设置表头名称,然后一下添加一列关于相同的属性的不同的值
#!/usr/bin/python3 from prettytable import PrettyTable x = PrettyTable() column_names = ["City name", "Area", "Population", "Annual Rainfall"] x.add_column(column_names[0], ["Adelaide", "Brisbane", "Darwin", "Hobart", "Sydney", "Melbourne", "Perth"]) x.add_column(column_names[1], [1295, 5905, 112, 1357, 2058, 1566, 5386 ]) x.add_column(column_names[2], [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769]) x.add_column(column_names[3], [600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9, 869.4]) print(x)
删除 行
del_row()通过从零开始的索引来删除指定行
#!/usr/bin/python3 from prettytable import PrettyTable x = PrettyTable() x.field_names = ["City name", "Area", "Population", "Annual Rainfall"] x.add_row(["Adelaide", 1295, 1158259, 600.5]) x.add_row(["Brisbane", 5905, 1857594, 1146.4]) x.add_row(["Darwin", 112, 120900, 1714.7]) x.add_row(["Hobart", 1357, 205556, 619.5]) x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) x.del_row(6) x.del_row(5) x.del_row(4) x.del_row(3) print(x) #结果: $ ./delete_rows.py +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | +-----------+------+------------+-----------------+
清空数据:
clear_rows()清楚所有的行但是会保留当前表的列名称,而clear()清除所有的包括行和列名
#!/usr/bin/python3 from prettytable import PrettyTable x = PrettyTable() x.field_names = ["City name", "Area", "Population", "Annual Rainfall"] x.add_row(["Adelaide", 1295, 1158259, 600.5]) x.add_row(["Brisbane", 5905, 1857594, 1146.4]) x.add_row(["Darwin", 112, 120900, 1714.7]) x.add_row(["Hobart", 1357, 205556, 619.5]) x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) x.clear_rows() print(x) #输出 $ ./clear_rows.py +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ +-----------+------+------------+-----------------+
对数据进行排序
通过sortby属性,我们可以对指定的列进行排序,reversesort属性控制排序的方向(升序或者降序)
#!/usr/bin/python3 from prettytable import PrettyTable x = PrettyTable() x.field_names = ["City name", "Area", "Population", "Annual Rainfall"] x.add_row(["Adelaide", 1295, 1158259, 600.5]) x.add_row(["Brisbane", 5905, 1857594, 1146.4]) x.add_row(["Darwin", 112, 120900, 1714.7]) x.add_row(["Hobart", 1357, 205556, 619.5]) x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) print("Table sorted by population:") x.sortby = "Population" print(x) print() print("Table sorted by city in descendig order:") x.sortby = "City name" x.reversesort = True print(x) #第一次的输出: $ ./sorting.py Table sorted by population: +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | | Adelaide | 1295 | 1158259 | 600.5 | | Perth | 5386 | 1554769 | 869.4 | | Brisbane | 5905 | 1857594 | 1146.4 | | Melbourne | 1566 | 3806092 | 646.9 | | Sydney | 2058 | 4336374 | 1214.8 | +-----------+------+------------+-----------------+ #第二次的输出 Table sorted by city in descendig order: +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Sydney | 2058 | 4336374 | 1214.8 | | Perth | 5386 | 1554769 | 869.4 | | Melbourne | 1566 | 3806092 | 646.9 | | Hobart | 1357 | 205556 | 619.5 | | Darwin | 112 | 120900 | 1714.7 | | Brisbane | 5905 | 1857594 | 1146.4 | | Adelaide | 1295 | 1158259 | 600.5 | +-----------+------+------------+-----------------+
对齐数据
align属性控制,取值为:l、c、r
#!/usr/bin/python3 from prettytable import PrettyTable x = PrettyTable() x.field_names = ["City name", "Area", "Population", "Annual Rainfall"] x.align["City name"] = "l"#如果不指示某些特定的列就对所有的如x.align='l'#将会对所有的行 x.align["Area"] = "r" x.align["Annual Rainfall"] = "r" x.add_row(["Adelaide", 1295, 1158259, 600.5]) x.add_row(["Brisbane", 5905, 1857594, 1146.4]) x.add_row(["Darwin", 112, 120900, 1714.7]) x.add_row(["Hobart", 1357, 205556, 619.5]) x.add_row(["Sydney", 2058, 4336374, 1214.8]) x.add_row(["Melbourne", 1566, 3806092, 646.9]) x.add_row(["Perth", 5386, 1554769, 869.4]) print(x) #输出 $ ./alignment.py +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | | Sydney | 2058 | 4336374 | 1214.8 | | Melbourne | 1566 | 3806092 | 646.9 | | Perth | 5386 | 1554769 | 869.4 | +-----------+------+------------+-----------------+
get_string()方法、控制表显示什么
这个方法返回 里面的参数对当前表的影响,他有几个选项来控制table怎样显示
title参数为输出的表加上名字
---snip--- print(x.get_string(title="Australian cities"))#就是在print里面 #输出 $ ./table_title.py +-------------------------------------------------+ | Australian cities | +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Adelaide | 1295 | 1158259 | 600.5 | | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | | Sydney | 2058 | 4336374 | 1214.8 | | Melbourne | 1566 | 3806092 | 646.9 | | Perth | 5386 | 1554769 | 869.4 | +-----------+------+------------+-----------------+
fields参数能选择那些列将要被显示出来
---snip--- print(x.get_string(fields=["City name", "Population"])) #输出 $ ./select_columns.py +-----------+------------+ | City name | Population | +-----------+------------+ | Adelaide | 1158259 | | Brisbane | 1857594 | | Darwin | 120900 | | Hobart | 205556 | | Sydney | 4336374 | | Melbourne | 3806092 | | Perth | 1554769 | +-----------+------------+
通过start和end参数,我们能选择那些行将要被显示出来
---snip--- print(x.get_string(start=1, end=4)) #输出 $ ./select_rows.py +-----------+------+------------+-----------------+ | City name | Area | Population | Annual Rainfall | +-----------+------+------------+-----------------+ | Brisbane | 5905 | 1857594 | 1146.4 | | Darwin | 112 | 120900 | 1714.7 | | Hobart | 1357 | 205556 | 619.5 | +-----------+------+------------+-----------------+
PrettyTable还可以通过CSV、database cursor HTML 导入数据、输出数据到HTMl,参见:http://zetcode.com/python/prettytable/
错误
*)TypeError: add_row() missing 1 required positional argument: 'row'
(sort) λ python some_sort.py Traceback (most recent call last): File "some_sort.py", line 1327, in <module> compared_all(collection,*func_list) File "some_sort.py", line 1288, in compared_all x.add_row(['1','2']) TypeError: add_row() missing 1 required positional argument: 'row'
因为在创建对象的时候的语句写错了
x=PrettyTable#这里写错了 x=PrettyTable()