本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。