用Python生成HTML表格的方法示例


Posted in Python onMarch 06, 2020

在 邮件报表 之类的开发任务中,需要生成 HTML 表格。

使用 Python 生成 HTML 表格基本没啥难度, for 循环遍历一遍数据并输出标签即可。 如果需要实现合并单元格,或者按需调整表格样式,就比较麻烦了。

这时,可以试试本文的主角 —— html-table 包,借助它可生成各种样式的 HTML 表格。 接下来,以一个简单的例子演示 html-table 的常用用法:

用Python生成HTML表格的方法示例

开始之前,须通过 pip 安装 html-table 包:

$ python -m pip install html-table

安装完毕后,即可导入 HTMLTable 类:

from HTMLTable import (
  HTMLTable,
)

创建一个新表格,标题为 果园收成表 :

# 标题
table = HTMLTable(caption='果园收成表')

附上表头:

# 表头行
table.append_header_rows((
  ('名称',  '产量 (吨)',  '环比',       ''),
  ('',    '',       '增长量 (吨)',   '增长率 (%)'),
))

注意到,表头分为两行,有些单元格需要合并,被合并的单元格需要留空占位。

合并单元格设置:

# 合并单元格
table[0][0].attr.rowspan = 2
table[0][1].attr.rowspan = 2
table[0][2].attr.colspan = 2

table[0] 取出第一行,即第一个 <tr> 标签; table0 取出第一个单元格,对应 名称 ; table0.attr 则是其标签 <th> 的属性。 该单元格合并下方一个单元格,需要将标签属性 rowspan 设置为 2

接着,加入数据,方法与表头类似,总共有 3 行:

# 数据行
table.append_data_rows((
  ('荔枝', 11, 1, 10),
  ('芒果', 9, -1, -10),
  ('香蕉', 6, 1, 20),
))

至此,数据准备完毕,可以着手调整样式。先设置表格标题样式:

# 标题样式
table.caption.set_style({
  'font-size': '15px',
})

设置 <table> 标签的样式:

# 表格样式,即<table>标签样式
table.set_style({
  'border-collapse': 'collapse',
  'word-break': 'keep-all',
  'white-space': 'nowrap',
  'font-size': '14px',
})

以上 CSS 样式设置在 <table> 标签上,作用于整个表格,影响表格边框、字体大小等。 注意到,下面会覆盖部分单元格(如表头单元格)的字体大小。

接着,设置每个单元格的样式,主要是规定边框样式:

# 统一设置所有单元格样式,<td>或<th>
table.set_cell_style({
  'border-color': '#000',
  'border-width': '1px',
  'border-style': 'solid',
  'padding': '5px',
})

接着,设置表头单元格样式,规定颜色、字体大小、以及填充大小:

# 表头样式
table.set_header_row_style({
  'color': '#fff',
  'background-color': '#48a6fb',
  'font-size': '18px',
})

# 覆盖表头单元格字体样式
table.set_header_cell_style({
  'padding': '15px',
})

set_header_row_style 将样式设置到表头两个 <tr> 标签上; set_header_cell_style 则将样式设置到每个 <th> 标签上。 应该尽量将颜色等样式设置到 <tr> 标签上,而不是 <th> 标签上,以精简生成的 HTML

将次级表头字体大小调小,不再赘述:

# 调小次表头字体大小
table[1].set_cell_style({
  'padding': '8px',
  'font-size': '15px',
})

遍历每个数据行,如果第 2 个单元格值小于 0 ,设置样式标红背景颜色:

# 遍历数据行,如果增长量为负,标红背景颜色
for row in table.iter_data_rows():
  if row[2].value < 0:
    row.set_style({
      'background-color': '#ffdddd',
    })

最后,生成 HTML 文本:

html = table.to_html()
print(html)

到此这篇关于用Python生成HTML表格的方法示例的文章就介绍到这了,更多相关Python生成HTML表格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python之模拟鼠标键盘动作具体实现
Dec 30 Python
Python生成随机数的方法
Jan 14 Python
python处理csv数据的方法
Mar 11 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python中一些不为人知的基础技巧总结
May 19 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
Python中有几个关键字
Jun 04 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 #Python
Python修改列表值问题解决方案
Mar 06 #Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 #Python
python-xpath获取html文档的部分内容
Mar 06 #Python
关于python中的xpath解析定位
Mar 06 #Python
Python网络爬虫信息提取mooc代码实例
Mar 06 #Python
appium+python adb常用命令分享
Mar 06 #Python
You might like
一个PHP的String类代码
2010/04/20 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
Python 数据结构之旋转链表
2017/02/25 Python
对Python中的@classmethod用法详解
2018/04/21 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
django fernet fields字段加密实践详解
2019/08/12 Python
python烟花效果的代码实例
2020/02/25 Python
如何在django中运行scrapy框架
2020/04/22 Python
Python绘制数码晶体管日期
2021/02/19 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
神路信息Java面试题目
2013/03/31 面试题
这段代码难道不该打印出56吗
2013/02/27 面试题
模具设计与制造专业应届生求职信
2013/10/18 职场文书
伦敦奥运会口号
2014/06/13 职场文书
求职教师自荐书
2014/06/19 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书