python学习-生成HTML文件

一、需求

每日发送服务器利用率信息,需要从falcon的接口查询主机cpu.idle信息并处理,生成HTML文件,通过邮箱发送指定负责人。

二、分享代码如下

1、代码段,请原谅我也是刚接触python,仅仅达到可用的程度

    h = html()
    with h.add(body()).add(div(id='content')):
        h1('服务器资源利用率')
        with table(border="1",cellspacing="0",style="border-collapse:collapse").add(tbody()):
            # 生成报表头部
            with tr(align="center",bgcolor="#0080FF",style="color:white"):
                td(rowspan="2").add('主机')
                td(colspan="4").add('cpu.idle平均使用率')

            l = tr(align="center",bgcolor="#0080FF",style="color:white")
            l += td('全天')
            l += td('18:00-19:00')
            l += td('19:00-20:00')
            l += td('20:00-21:00')
            #for hostname,value in sorted(dic.items(),key=lambda item:item[0]):
            # 插入主机信息和监控数据
            for hostname,value in dic.items():
                l = tr(align="center")
                with l:
                    td(hostname)
                    td(value[0])
                    td(value[1])
                    td(value[2])
                    td(value[3])

    with open('notice.html','a') as f:
        f.write(h.render())

2、生成的html文件内容

<html>
  <body>
    <div id="content">
      <h1>服务器资源利用率</h1>
      <table border="1" cellspacing="0" style="border-collapse:collapse">
        <tbody>
          <tr align="center" bgcolor="#0080FF" style="color:white">
            <td rowspan="2">主机</td>
            <td colspan="4">cpu.idle平均使用率</td>
          </tr>
          <tr align="center" bgcolor="#0080FF" style="color:white">
            <td>全天</td>
            <td>18:00-19:00</td>
            <td>19:00-20:00</td>
            <td>20:00-21:00</td>
          </tr>
          <tr align="center">
            <td>host1</td>
            <td>86</td>
            <td>85</td>
            <td>86</td>
            <td>86</td>
          </tr>
          <tr align="center">
            <td>host2</td>
            <td>94</td>
            <td>93</td>
            <td>94</td>
            <td>94</td>
          </tr>
          <tr align="center">
            <td>host3</td>
            <td>87</td>
            <td>86</td>
            <td>86</td>
            <td>87</td>
          </tr>
          <tr align="center">
            <td>host4</td>
            <td>94</td>
            <td>94</td>
            <td>94</td>
            <td>94</td>
          </tr>
          <tr align="center">
            <td>host5</td>
            <td>89</td>
            <td>88</td>
            <td>88</td>
            <td>90</td>
          </tr>
          <tr align="center">
            <td>host6</td>
            <td>80</td>
            <td>78</td>
            <td>80</td>
            <td>80</td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>

3、效果
在这里插入图片描述

三、说明
1、生成表头
    h = html()
    with h.add(body()).add(div(id='content')):
        h1('服务器资源利用率')

在这里插入图片描述
生成一段正文,也就是上图红框的位置

        with table(border="1",cellspacing="0",style="border-collapse:collapse").add(tbody()):
            # 生成报表头部
            with tr(align="center",bgcolor="#0080FF",style="color:white"):
                td(rowspan="2").add('主机')
                td(colspan="4").add('cpu.idle平均使用率')

            l = tr(align="center",bgcolor="#0080FF",style="color:white")
            l += td('全天')
            l += td('18:00-19:00')
            l += td('19:00-20:00')
            l += td('20:00-21:00')

在这里插入图片描述
生成一个表格说明的内容,如上图红框位置,由于涉及到行列合并,所以这里使用的是在td格式中添加行列合并的内容

2、分步解析
with table(border="1",cellspacing="0",style="border-collapse:collapse").add(tbody()):

生成table内容,在table内添加tbody内容

with tr(align="center",bgcolor="#0080FF",style="color:white"): 

在tr格式内部添加表格内容

<tr>
    ......
</tr>

生成的html格式如上所示

 td(rowspan="2").add('主机')

添加td内容,如果只添加主机,那么直接使用td(‘主机’)即可,但是这里我需要合并两行内容,这里就需要增加rowspan="2"属性,如果需要更多属性,请用,号分割

td(colspan="4").add('cpu.idle平均使用率')

和上面一样,只是需要一个合并四列的单元格,所以需要colspan="4"属性。

          <tr align="center" bgcolor="#0080FF" style="color:white">
            <td rowspan="2">主机</td>
            <td colspan="4">cpu.idle平均使用率</td>
          </tr>

在这里插入图片描述
这两句生成的html格式和最终效果如图

l = tr(align="center",bgcolor="#0080FF",style="color:white")
            l += td('全天')
            l += td('18:00-19:00')
            l += td('19:00-20:00')
            l += td('20:00-21:00')

这行段就是在合并的四列,每列代表什么内容,这里只有tr有属性,分别是居中对齐,背景为蓝色,字体为白色,td无属性

          <tr align="center" bgcolor="#0080FF" style="color:white">
            <td>全天</td>
            <td>18:00-19:00</td>
            <td>19:00-20:00</td>
            <td>20:00-21:00</td>
          </tr>

在这里插入图片描述
这段代码生成的html格式和最终效果如图

3、生成表格内容
# 插入主机信息和监控数据
for hostname,value in dic.items():
    l = tr(align="center")
    with l:
        td(hostname)
        td(value[0])
        td(value[1])
        td(value[2])
        td(value[3])

这段是通过一个for循环,在每列插入主机和四项监控数据

dic = {'host1':[value1,value2,value3,value4],'host2':[value1,value2,value3,value4]}

原始内容是一个主机对应多个value,dic的格式如上所示

          <tr align="center">
            <td>host1</td>
            <td>86</td>
            <td>85</td>
            <td>86</td>
            <td>86</td>
          </tr>

在这里插入图片描述
每次循环生成的html内容和效果如上所示

    with open('notice.html','a') as f:
        f.write(h.render())

这句是将生成的html信息追加到notice.html文件,属性为
a:追加,因为我将主机分组,所以要循环多次生成html文件,不能覆盖上次内容,所以这里使用a
w:写入,每次生成的内容会覆盖原内容
r:只读,读取文件使用

四、调试代码

为了方便调试,也就是每次生成的html文件要验证是否是自己需要的样式,那么可以使用在线工具验证,点我访问
在这里插入图片描述
方法很简单,将生成的html文件内容复制到“编辑您的代码”里面,点击提交代码,即可立即生成表格。

参考资料:https://blog.csdn.net/weixin_42028364/article/details/82985193

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值