具有多个标题/标题的 Python PrettyTable

Posted

技术标签:

【中文标题】具有多个标题/标题的 Python PrettyTable【英文标题】:Python PrettyTable with multiple header/ title 【发布时间】:2018-12-26 18:55:27 【问题描述】:

我能够创建一个带有标题和表格字段的 python PrettyTable。但是,我想在一个表中创建多个部分,即有多个标题(或 html rowspan/colspan 以合并单元格以创建部分)。 有什么建议吗?

目前,我可以使用以下方法创建表:

table_fields = ['No','Name', 'Age']
from prettytable import PrettyTable
pt = PrettyTable(table_fields)
pt.padding_width = 1
pt.title = 'Customer Info'
pt.add_row(['1','abc','26'])
pt.add_row(['2','xyz','52'])

输出:

+------------------------------+
|    Customer Info             |
+------------------------------+ 
| No | Name      |    Age      |
+------------------------------+
| 1  |  abc      |   26        |
| 2  |  xyz      |   52        |
+------------------------------+

期望的输出:

+------------------------------+
|    Customer Info             |
+------------------------------+ 
| No | Name      |    Age      |
+------------------------------+
|  DEPARTMENT 1                |
+------------------------------+
| 1  |  abc      |   26        |
| 2  |  xyz      |   52        |
+------------------------------+
|  DEPARTMENT 2                |
+------------------------------+
| 1  |  pqr      |   44        |
| 2  |  def      |   31        |
+------------------------------+

寻找一种在表中添加部门 1 和部门 2 行的方法。

【问题讨论】:

【参考方案1】:

这是我能够获得所需输出的最接近的结果(每次将新部门的人员添加到表中时,使用一行作为部门编号): 注意:我无法找到更改单元格列跨度的方法,因此我必须添加空格以填充预期的单元格数量,否则无法添加行。

+---------------------------+
|       Customer Info       |
+--------------+------+-----+
|      No      | Name | Age |
+--------------+------+-----+
| DEPARTMENT 1 |      |     |
|      1       | abc  |  41 |
|      2       | def  |  29 |
| DEPARTMENT 2 |      |     |
|      1       | pqr  |  21 |
|      2       | xyz  |  37 |
+--------------+------+-----+

使用以下代码:

from prettytable import PrettyTable

departments = 
    "1": 
        "abc": 
            "age": 41
        ,
        "def": 
            "age": 29
        
    ,
    "2": 
        "pqr": 
            "age": 21
        ,
        "xyz": 
            "age": 37
        
    


table_fields = ['No', 'Name', 'Age']
pt = PrettyTable(table_fields)
pt.padding_width = 1
pt.title = 'Customer Info'
person_no = 1
for department, people in departments.items():
    pt.add_row(["DEPARTMENT ".format(department), "", ""])
    for name, person in people.items():
        pt.add_row([person_no, name, person["age"]])
        person_no += 1
    person_no = 1
print(pt)

我希望这足以满足您的需求,如果您或其他人知道如何为单元格指定列跨度,我很想知道!

【讨论】:

以上是关于具有多个标题/标题的 Python PrettyTable的主要内容,如果未能解决你的问题,请参考以下文章

Python库: PrettyTable 模块简介和简单使用

具有多个参数的Python多处理池映射[重复]

将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中

具有多个可能输入的类型检查 Python 方法

python lxml findall 具有多个命名空间

如何为具有多个 y 轴的图表设置动画(python)