,,Python使用pyh生成HTML文档的方法示例

,,Python使用pyh生成HTML文档的方法示例

本文主要介绍Python使用pyh生成HTML文档的方法的一个例子。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。

最近,项目中的结果需要导出为HTML。我在网上搜索时发现了这个库。通过一些官方文件和网络博客找到它的用途还是很简单的,所以我选择在项目中使用。

在使用的时候发现了Python3的一些问题,网上很多地方都没有提到,所以在这里整理一下它的用法,遇到的问题和解决方法,供大家参考。

本文主要参考pyh中文文档。

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

常规用途

在使用中,通常先导入模块:

从phy导入*

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

page=PyH(标题)

其中title是一个字符串,会显示为页面的标题,也就是说,生成的HTML代码是在表头添加一个title标签,并使用这个字符串作为文本值。

然后我们就可以使用addcss方法或者addjs方法来导入外部的js文件或者css文件(调用这两个函数会在HTML的头中产生一个导入的代码,我暂时还没有找到在正文中添加样式代码的方法)

然后创建一个tag对象,对应的tag类的名称与HTML中对应的名称相同,传入对象的参数是tag中的属性。除了class属性对应的参数名是cl,其他参数名都是和HTML中的属性一一对应的。例如,如果我们想创建一个div标签,我们可以这样写

MyDiv=div ('test div ',id='div1 ',cl='cls_div ')

生成的HTML代码如下:

测试div/div

向元素添加元素可以使用符号,该符号返回包含的最后一个符号对象。像这样

div(id=' div 1 ')p(' test ' cl=' p _ tag ')

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

div id='div1 '

Class=' p _ tag '测试/p

/div

当生成一个合适的HTML文档时,可以使用Print方法打印输出,也可以使用render函数返回相应的HTML代码,以便我们保存它或做进一步的处理。

以上只是简单介绍。详细用法可以参考上面那篇文章,写的很详细。这里有一个示例代码来说明我如何处理一些错误,做了一些简单的扩展,粗略地看了一下里面的源代码。

例子

来自pyh进口公司*

导入编解码器

从xml.sax.saxutils导入转义

字宽=100

def create_base(table_title,page):

page.addCSS('base.css ')

#显示信息的表格

base_table=页表(cl='diff ',id='difflib_chg_to0__top ',cellspacing='0 ',cellpadding='0 ',rules='groups ')

对于范围(4)中的I:

base_table列组()

#标题

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()

返回t_body

#写一行信息

def write_line(tr_tag,mark,data):

tr_tag td(mark,cl='diff_header ')

tr_tag td(数据)

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

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

lines=i_f.read()。分割线()

i_f.close()

page=PyH(标题)

t_body=create_base(table_title,page)

线路号=1

对于行中的数据:

如果len(data)=WORD_WIDTH:

对于范围内的I(len(data)//WORD _ WIDTH 1):

sub _ data=data[WORD _ WIDTH * I:min(WORD _ WIDTH *(I 1),len(data) - 1)]

如果i==0:

mark=str(行号)

否则:

马克=' '

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)

否则:

tr_tag=t_body tr()

数据=转义(数据)

data=data.replace(' ',' ')

data=data.replace('\t ',' ')

write_line(tr_tag,str(lineno),data)

线路号=1

html=page.render()

o _ f=codecs . open(of file,' w ',encoding='utf-8 ')

of . write(html)

o_f.close()

这是一个将任意文本文件转换成HTML文档的例子,主要调用txt2html函数,这个函数有四个参数,页面的标题,显示文本内容的表格的标题,输入文件路径,输出文件路径。

同时做一些简单的处理,对原始文档中的每一行进行标注,同时一行只显示100个字符,多余的行进行换行,方便阅读。

打开后生成的HTML大致如下:

在Python3环境中直接运行发现它报告了一个错误:

在Python2中,unicode字符串和普通字符串是有区别的,但是在Python3中,所有字符串默认都是Unicode的,这就取消了Python2中的Unicode功能。这是这里报错的主要原因,所以我们定位报错的地方,修改代码。去掉unicode函数(在Python2中,unicode函数需要传入一个普通的字符串,所以这里我们只需要去掉unicode函数并保留原来的参数,直接注释字符符号转换或者改为pass即可。

解决了unicode问题后,我又运行了一次,报告了这样一个错误。

定位对应的代码,在原代码位置有这样一个代码:

定义标签工厂(名称):

f类(标签):

tagname=name

f.__名称__=名称

返回f

thisModule=modules[__name__]

对于标签中的t:

setattr(thisModule,t,TagFactory(t))

从这段代码中我们可以知道,每当我们通过对应的名称创建一个标签时,都会在tags中找到对应的标签,然后调用factory方法生成对应的标签。这个工厂方法实际上生成了一个标签对象,所有的HTML标签都是这个标签类的。因此,我们可以猜测,如果我们想要添加一个新的tag对象,我们可以修改tags中的值。添加相应的标记值后,我们发现代码可以运行了。到目前为止,问题已经解决。

事实上,当python2代码移植到python3环境中时,这些错误是常见的。至于它的源代码,我不太了解,主要是它生成标签。不知道为什么修改标签后还能运行。我还是不太明白Python类工厂的概念。基本内容补上好像还需要时间。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: