• prettytable:一款像数据库一样可完美格式化输出的 Python 库


    大家好,我们用 MySQL 客户端查询数据的时候,是以下面这种格式显示的:
    在这里插入图片描述

    内容展示的非常漂亮,而 Python 有一个第三方模块叫 prettytable,专门用来将数据以上面这种格式输出,喜欢记得收藏、关注、点赞。

    技术交流,完整资料,文末获取

    我们来看一下它的详细用法。

    添加表头、添加行、添加列

    类似于数据库中的表,由表头(或者说字段名),以及每一行的内容组成。

    from prettytable import PrettyTable
    
    # 传入的 name、age、country 相当于表头
    tb = PrettyTable(["name", "age", "country"])
    # 调用 add_row 添加行记录
    tb.add_row(["Jack Morrison", 49, "America"])
    tb.add_row(["Shimada Genji", 35, "Japan"])
    tb.add_row(["Shimada Hanzo", 38, "Japan"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland"])
    
    print(tb)
    """
    +----------------+-----+-------------+
    |      name      | age |   country   |
    +----------------+-----+-------------+
    | Jack Morrison  |  49 |   America   |
    | Shimada Genji  |  35 |    Japan    |
    | Shimada Hanzo  |  38 |    Japan    |
    | Angela Ziegler |  37 | Switzerland |
    +----------------+-----+-------------+
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    如果在编写的过程中,我们需要临时添加一列,prettytable 也是支持的。

    from prettytable import PrettyTable
    
    tb = PrettyTable(["name", "age", "country"])
    tb.add_row(["Jack Morrison", 49, "America"])
    tb.add_row(["Shimada Genji", 35, "Japan"])
    tb.add_row(["Shimada Hanzo", 38, "Japan"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland"])
    
    # 调用 add_column 添加一列
    tb.add_column("gender",
                  ["male", "male", "male", "female"])
    print(tb)
    """
    +----------------+-----+-------------+--------+
    |      name      | age |   country   | gender |
    +----------------+-----+-------------+--------+
    | Jack Morrison  |  49 |   America   |  male  |
    | Shimada Genji  |  35 |    Japan    |  male  |
    | Shimada Hanzo  |  38 |    Japan    |  male  |
    | Angela Ziegler |  37 | Switzerland | female |
    +----------------+-----+-------------+--------+
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    输出内容是不是和 MySQL数据库类似呢。

    此外 prettytable 还支持从 csv、数据库、html 等数据源中导入数据,但说实话,从数据源读取数据我们一般使用 pandas,并且还会伴随着数据处理。而使用 prettytable 只是为了让程序中产生的信息,能够以结构化的形式打印,很少会从文件或数据库里面读数据。

    输出指定行、指定列

    我们也可以输出 table 的指定行、指定列。

    from prettytable import PrettyTable
    
    tb = PrettyTable(["name", "age", "country", "gender"])
    tb.add_row(["Jack Morrison", 49, "America", "male"])
    tb.add_row(["Shimada Genji", 35, "Japan", "male"])
    tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
    # 只输出 name 和 age 两列
    # start 和 end 表示开始和结束的行数(从 0 开始)
    print(tb.get_string(fields=["name", "age"],
                        start=1, end=3))
    """
    +---------------+-----+
    |      name     | age |
    +---------------+-----+
    | Shimada Genji |  35 |
    | Shimada Hanzo |  38 |
    +---------------+-----+
    """
    
    # 此外可以用来进行排序
    print(tb.get_string(sortby="age", reversesort=True))
    """
    +----------------+-----+-------------+--------+
    |      name      | age |   country   | gender |
    +----------------+-----+-------------+--------+
    | Jack Morrison  |  49 |   America   |  male  |
    | Shimada Hanzo  |  38 |    Japan    |  male  |
    | Angela Ziegler |  37 | Switzerland | female |
    | Shimada Genji  |  35 |    Japan    |  male  |
    +----------------+-----+-------------+--------+
    """
    
    • 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

    设置表格样式

    表格也支持几种不同的样式,供我们选择。

    from prettytable import *
    
    tb = PrettyTable(["name", "age", "country", "gender"])
    tb.add_row(["Jack Morrison", 49, "America", "male"])
    tb.add_row(["Shimada Genji", 35, "Japan", "male"])
    tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
    
    # 样式支持以下几种:
    # DEFAULT、MSWORD_FRIENDLY、PLAIN_COLUMNS、RANDOM
    # 之前的样式就是 DEFAULT
    tb.set_style(MSWORD_FRIENDLY)
    print(tb)
    """
    |      name      | age |   country   | gender |
    | Jack Morrison  |  49 |   America   |  male  |
    | Shimada Genji  |  35 |    Japan    |  male  |
    | Shimada Hanzo  |  38 |    Japan    |  male  |
    | Angela Ziegler |  37 | Switzerland | female |
    """
    
    tb.set_style(PLAIN_COLUMNS)
    print(tb)
    """
         name             age          country          gender        
    Jack Morrison          49          America           male         
    Shimada Genji          35           Japan            male         
    Shimada Hanzo          38           Japan            male         
    Angela Ziegler         37        Switzerland        female     
    """
    
    tb.set_style(RANDOM)
    print(tb)
    """
    ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
    .        name              age           country           gender     .
    ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
    .   Jack Morrison           49           America            male      .
    .   Shimada Genji           35            Japan             male      .
    .   Shimada Hanzo           38            Japan             male      .
    .   Angela Ziegler          37         Switzerland         female     .
    ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
    """
    
    • 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
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    说实话,还是默认的 DEFAULT 样式最好看。

    设置对齐方式

    from prettytable import *
    
    tb = PrettyTable(["name", "age", "country", "gender"])
    tb.add_row(["Jack Morrison", 49, "America", "male"])
    tb.add_row(["Shimada Genji", 35, "Japan", "male"])
    tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
    
    # l 代表左对齐,c 代表居中,r 代表右对齐
    # 默认居中
    tb.align["name"] = "l"
    tb.align["age"] = "c"
    tb.align["country"] = "r"
    print(tb)
    """
    +----------------+-----+-------------+--------+
    | name           | age |     country | gender |
    +----------------+-----+-------------+--------+
    | Jack Morrison  |  49 |     America |  male  |
    | Shimada Genji  |  35 |       Japan |  male  |
    | Shimada Hanzo  |  38 |       Japan |  male  |
    | Angela Ziegler |  37 | Switzerland | female |
    +----------------+-----+-------------+--------+
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    设置边框样式

    在 PrettyTable 中,边框由三个部分组成:横边框,竖边框,和边框连接符,我们都可以修改。

    from prettytable import *
    
    tb = PrettyTable(["name", "age", "country", "gender"])
    tb.add_row(["Jack Morrison", 49, "America", "male"])
    tb.add_row(["Shimada Genji", 35, "Japan", "male"])
    tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
    tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
    
    # 是否显示边框,默认为True
    tb.border = True
    # 横边框
    tb.horizontal_char = '^'
    # 竖边框
    tb.vertical_char = '>'
    # 边框连接符
    tb.junction_char='~'
    
    print(tb)
    """
    ~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
    >      name      > age >   country   > gender >
    ~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
    > Jack Morrison  >  49 >   America   >  male  >
    > Shimada Genji  >  35 >    Japan    >  male  >
    > Shimada Hanzo  >  38 >    Japan    >  male  >
    > Angela Ziegler >  37 > Switzerland > female >
    ~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
    """
    
    • 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

    小结

    以上就是 PrettyTable 相关的内容,大部分情况下我们使用默认的样式即可。

    推荐文章

    技术交流

    欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取

    在这里插入图片描述

    目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

    • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
    • 方式②、添加微信号:dkl88191,备注:来自CSDN
    • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

    长按关注

  • 相关阅读:
    Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)
    【数据增强】
    低代码平台
    Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!
    讯飞大数据竞赛2022 汽车领域多语种迁移学习 打卡博客
    sonarqube二次安装启动报错解决方法
    随想录一刷Day45——动态规划
    APIMapper 源码解析
    【 Git 和 SVN 的区别】
    C++从入门到起飞之——输入&输出!
  • 原文地址:https://blog.csdn.net/weixin_38037405/article/details/125973437