• Python中prettytable库


    prettytable库

    一、 简介

    1、 概述

    因为信息是展现在命令行中的,众所周知,命令行展现复杂的文本看起来着实累人,于是就想着能像表格那样展示,那看起来就舒服多了。

    prettytable库就是这么一个工具,prettytable可以打印出美观的表格,并且对中文支持相当好(如果有试图自己实现打印表格,你就应该知道处理中文是多么的麻烦)

    2、 安装

    prettytable并非python的内置库,通过pip install prettytable即可安装。

    3、 实例

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    from prettytable import PrettyTable
    
    
    table = PrettyTable(["index", "name", 'age'])  # 实例化对象
    """
    # 效果一样
    table = PrettyTable()
    table.field_names = ["index", "name", 'age']
    """
    
    table.add_rows([  # 添加行
        [1, "Milk", "12"],
        [2, "Lili", "34"]
    ])
    print(table)  # 把表格输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    二、 添加数据

    1、 直接添加

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    from prettytable import PrettyTable
    
    # 方式一
    table = PrettyTable(["index", "name", 'age'])  # 实例化对象
    table.add_rows([  # 添加行
        [1, "Milk", "12"],
        [2, "Lili", "34"]
    ])
    print(table)
    
    # 方式二
    table_ = PrettyTable()
    table_.add_column('index', ['1', '2'])  # 直接添加每一列的数据
    table_.add_column('name', ['Milk', 'Lili'])
    table_.add_column('age', ['12', '34'])
    print(table_)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • del_row方法采用要删除的单行的整数索引。
    • del_column方法采用要删除的单个列的字段名称。
    • clear_rows方法不接受任何参数并删除表中的所有行 - 但保持字段名称不变,以便您可以使用相同类型的数据重新填充它。
    • clear方法不接受任何参数并删除所有行和所有字段名称。但是,这与创建一个新的表实例并不完全相同 - 与样式相关的设置将被保留。

    2、 文件读取

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    import json
    from prettytable import from_csv, from_json, from_html
    
    # 从CSV文件中读取
    table = from_csv(open("test.csv", "r", encoding="utf-8"))  # 注意,要打开文件
    print(table)
    
    # 从JSON字符串中读取
    data = [["name", "age"], {"name": "r", "age": 23}, {"name": "d", "age": 25}, {"name": "a", "age": 24}]  # 注意,要将第一个数据作为字段
    table = from_json(json.dumps(data))  
    print(table)
    
    # 从html代码中读取
    html = """
    
    序号姓名年龄
    1a23
    2b24
    """
    table = from_html(html) print(table)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    3、 数据库

    还可以通过数据库的游标来进行读取

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    import sqlite3
    from prettytable import from_db_cursor
    
    # 从数据库游标中读取
    conn = sqlite3.connect("USERINFO.db")
    cur = conn.cursor()
    cur.execute("SELECT * FROM res") 
    table = from_db_cursor(cur)
    print(table)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、 输出方式

    1、 全部输出

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    from prettytable import PrettyTable
    
    
    table = PrettyTable(["index", "name", 'age'])
    table.add_rows([
        [1, "Milk", "12"],
        [2, "Lili", "34"]
    ])
    print(table)  # 把表格输出
    print(table.get_html_string())  # 输出表格的html样式,还可以输出csv, json, latex
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、 选择性输出

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    from prettytable import PrettyTable
    
    
    table = PrettyTable(["index", "name", 'age'])
    table.add_rows([
        [1, "Milk", "12"],
        [2, "Lili", "34"],
        [3, "Lili1", "35"]
    ])
    print(table[0: 2])  # 切片输出,输出前2行  print(table.get_string(start=0, end=2))
    print(table.get_string(fields=["name", "age"]))  # 只输出姓名和年龄对应的列
    print(table.get_string(sortby="age", reversesort=True))  # 根据年龄进行降序排序,默认为True,升序排序
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    四、 输出样式

    1、 内置样式

    通过set_style()可以设置表格样式,prettytable内置了多种的样式个人觉得MSWORD_FRIENDLY,PLAIN_COLUMNS,DEFAULT 这三种样式看起来比较清爽,在终端下显示表格本来看起就很累,再加上一下花里胡哨的东西看起来就更累。

    除了以上推荐的三种样式以外,还有一种样式不得不说,那就是RANDOM,这是一种随机的样式,每一次打印都会在内置的样式中随机选择一个,比较好玩。

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    from prettytable import PrettyTable
    from prettytable import MSWORD_FRIENDLY  # 电子文档模式
    from prettytable import PLAIN_COLUMNS  # 普通文本模式
    from prettytable import RANDOM  # 随机样式
    from prettytable import DEFAULT  # 默认样式
    
    
    
    table = PrettyTable(["index", "name", 'age'])
    table.add_rows([
        [1, "Milk", "12"],
        [2, "Lili", "34"],
        [3, "Lili1", "35"]
    ])
    # table.set_style(MSWORD_FRIENDLY)
    # table.set_style(PLAIN_COLUMNS)
    table.set_style(RANDOM)
    print(table)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • DEFAULT- 默认外观,用于撤消您可能所做的任何样式更改
    • PLAIN_COLUMNS- 一种无边框样式,适用于柱状数据的命令行程序
    • MARKDOWN- 遵循 Markdown 语法的样式
    • ORGMODE- 适合Org 模式语法的表格样式
    • SINGLE_BORDERDOUBLE_BORDER- 使用带有方框图字符的连续单/双边框线的样式,以便在终端上进行更精美的显示

    2、 自定义样式

    具体配置样式,请到官网查看:https://pypi.org/project/prettytable/

    对齐: align提供了用户设置对齐的方式,值有l,r,c方便代表左对齐,右对齐和居中 如果不设置,默认居中对齐。

    边框样式: 在PrettyTable中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交叉的链接符号)

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    __author__ = "A.L.Kun"
    __file__ = "demo02.py"
    __email__ = "liu.zhong.kun@foxmail.com"
    
    from prettytable import PrettyTable
    
    table = PrettyTable(["index", "name", 'age'])
    table.add_rows([
        [1, "Milk", "12"],
        [2, "Lili", "34"],
        [3, "Lili1", "35"]
    ])
    table.border = True  # 是否显示边框
    table.junction_char = '+'  # 绘制线连接的单个字符
    table.horizontal_char = '~'  # 水平连接线的字符
    table.vertical_char = '*'  # 垂直线连接的字符
    print(table)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    这是库的大概使用方法,具体请参考官方网站的内容。

  • 相关阅读:
    设计模式 10 装饰器模式
    虚拟化+docker基本概念以及安装部署
    分享一款嵌入式开源按键框架代码工程MultiButton
    树状数组的两个操作的证明
    京东面试——算法工程师
    金仓数据库KingbaseES数据库参考手册(服务器配置参数6. 预写式日志)
    MySQL批量导入Excel数据【超详细】
    postgresql源码学习(24)—— 事务日志⑤-日志写入WAL Buffer
    postgresql14-模式的管理(三)
    Docker安装、启动、管理ElasticSearch、ElasticSearch-heade、kibana
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/126039567