如何在Python中创建比较表格

0 投票
2 回答
1926 浏览
提问于 2025-04-15 19:33

我想用Python生成像这样的比较表格。

替代文本 http://img714.imageshack.us/img714/5677/22862352.png

你能推荐一些库来实现这个吗?

2 个回答

0

Reportlab有一些很棒的工具,可以用来创建和格式化表格。唯一的缺点是,它输出的是PDF格式,所以你需要一个中间步骤把输出转换成PNG格式。想了解更多关于Reportlab表格的信息,可以查看Reportlab用户指南

这里有一段我写的代码,可以生成一个和你示例图片非常相似的东西:

from reportlab.pdfgen.canvas import Canvas
from reportlab.platypus import Frame, Table
from reportlab.lib.units import mm
from reportlab.lib.colors import black

canvas = Canvas("table_test.pdf")
frame = Frame(10*mm, 10*mm, 190*mm, 280*mm) 

# Some mock data for the table. The data must be supplied as a list of lists:
table_data = [['Datasets', 'COL1', 'COL2', 'COL3', 'COL4', 'COL5'],
             ['ROW0',
              u'6.43 \xb1 4.72',
              u'6.16 \xb1 3.83',
              u'2.79 \xb1 5.43',
              u'19.08 \xb1 1.12',
              u'1.76 \xb1 4.88'],
             ['ROW1',
              u'1.09 \xb1 2.42',
              u'11.51 \xb1 1.29',
              u'10.14 \xb1 0.76',
              u'10.09 \xb1 0.63',
              u'27.16 \xb1 3.88'],
             ['ROW2',
              u'0.88 \xb1 5.83',
              u'23.13 \xb1 4.54',
              u'8.96 \xb1 4.94',
              u'4.30 \xb1 0.30',
              u'13.20 \xb1 1.31'],
             ['ROW3',
              u'22.87 \xb1 2.22',
              u'8.56 \xb1 0.91',
              u'6.36 \xb1 1.69',
              u'4.30 \xb1 4.74',
              u'12.39 \xb1 3.49'],
             ['ROW4',
              u'14.35 \xb1 5.04',
              u'15.29 \xb1 2.17',
              u'8.39 \xb1 3.05',
              u'11.38 \xb1 3.02',
              u'10.21 \xb1 4.23']]

table_style = [("BOX", (0, 0), (-1, -1), 0.5, black), # box around table
               ("LINEBELOW", (0, 0), (-1, 0), 0.5, black), # line under header
               ("LINEAFTER", (0, 0), (0, -1), 0.5, black), # vertical line
               ("LINEAFTER", (1, 0), (1, -1), 0.5, black), # vertical line
               ("LINEAFTER", (2, 0), (2, -1), 0.5, black), # vertical line
               ("LINEAFTER", (3, 0), (3, -1), 0.5, black), # vertical line
               ("LINEAFTER", (4, 0), (4, -1), 0.5, black), # vertical line
               ]

table = Table(table_data, style=table_style)
frame.add(table, canvas)
canvas.save()
1

这肯定是TeX的输出。学习足够的TeX(或者更好的LaTeX)大约只需要60分钟,就能生成像这样的表格。

撰写回答