python 生成html文档_Python使用pyh生成HTML文档的方法示例

最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它。

在使用的时候发现在Python3中有些问题,网上很多地方都没有提到,因此我在这将它的使用以及我遇到的问题和解决方案整理出来供大家参考

本文主要参考 pyh中文文档

下载的样本也是该文中提到的地址

常规使用

在使用时一般先导入模块:

from phy import *

然后可以创建一个PyH对象就像这样

page = PyH(title)

其中title是一个字符串,这个字符串将作为页面的标题显示,也就是说此时产生的HTML代码就是在头部加上一个title标签并将这个字符串作为文本值

然后我们可以addCSS方法或者addJS方法引入外部的js文件或者css文件(调用这两个函数将在HTML的头部产生一个引入的代码,对于那种在body中添加style代码的我暂时没有找到什么办法)

然后就是创建标签对象,对应标签类的名字所与在HTML中的对应的名称相同,传入对象的参数就是标签中的属性,除了class属性对应的参数名称是cl外,其余的参数名称与在HTML中的属性一一对应。比如我们要创建一个div标签可以这样写

myDiv = div('测试div', id = 'div1', cl = "cls_div")

最终生成的HTML代码如下:

测试div

将元素加入某个元素中可以使用<

div(id = 'div1') << p('测试' cl = 'p_tag')

这句代码会返回p元素对应的对象,而生成的HTML代码如下:

测试

当生成了合适的HTML文档后可以使用printOut方法将其打印,也可以使用render函数返回对应的HTML代码,以便我们进行存盘或者做进一步处理

上面只是简单的做一下介绍,详细的使用方法请参看上面提到的一篇文章,这上面写的比较详细。下面来通过一个例子代码来说明我是如何处理一些出现的错误、做一些简单的扩展,并大致看看里面的源代码

例子

from pyh import *

import codecs

from xml.sax.saxutils import escape

WORD_WIDTH = 100

def create_base(table_title, page):

page.addCSS('base.css')

#展示信息的表

base_table = page << table(cl = 'diff', id = 'difflib_chg_to0__top', cellspacing = '0', cellpadding = '0', rules = 'groups')

for i in range(4):

base_table << colgroup()

#表头

t_head = base_table << thead()

tr_tag = t_head << tr()

tr_tag << th(cl = 'diff_next') << br()

tr_tag << th(table_title, colspan = '2', cl = 'diff_header')

t_body = base_table << tbody()

return t_body

#写入一行信息

def write_line(tr_tag, mark, data):

tr_tag << td(mark, cl = 'diff_header')

tr_tag << td(data)

def txt2html(title, table_title, ifile, ofile):

i_f = codecs.open(ifile, 'r',encoding='utf-8')

lines = i_f.read().splitlines()

i_f.close()

page = PyH(title)

t_body = create_base(table_title, page)

lineno = 1

for data in lines:

if len(data) >= WORD_WIDTH:

for i in range(len(data) // WORD_WIDTH + 1):

sub_data = data[WORD_WIDTH * i: min(WORD_WIDTH * (i + 1), len(data) - 1)]

if i == 0:

mark = str(lineno)

else:

mark = '>'

tr_tag = t_body << tr()

sub_data = escape(sub_data)

sub_data = sub_data.replace(" ", " ")

sub_data = sub_data.replace("t", " ")

write_line(tr_tag, mark, sub_data)

else:

tr_tag = t_body << tr()

data = escape(data)

data = data.replace(" ", " ")

data = data.replace("t", " ")

write_line(tr_tag, str(lineno), data)

lineno += 1

html = page.render()

o_f = codecs.open(ofile, 'w', encoding= 'utf-8')

o_f.write(html)

o_f.close()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值