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

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

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

常规使用

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

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

这是一个将任意文本文件转化为HTML文档的例子,主要是在调用txt2html函数,该函数有4个参数,页面的标题,展示文本内容的表格的标题,输入文件路径,输出文件路径

同时做了一些简单的处理,对原文档中的每行进行标号,同时设置一行只显示100个字符多余的进行换行,以便阅读

最终打开生成的HTML大致如下:

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

在Python2中存在Unicode字符串和普通字符串的区别,但是在Python3中所有字符串都默认是Unicode的,它取消了关于Python2中unicode函数,这里报错主要是这个原因,因此我们定位到报错的地方,将代码进行修改,去掉unicode函数(在Python2中unicode函数需要传入一个普通字符串,因此这里我们只需要去掉unicode函数,保留原来的参数即可,对于进行字符号转化的直接注释或者改为pass即可

解决了unicode问题之后再次运行,又报了这样一个错误

定位到对应代码处,在原来的代码位置有这么一段代码:

def TagFactory(name):

class f(Tag):

tagname = name

f.__name__ = name

return f

thisModule = modules[__name__]

for t in tags:

setattr(thisModule, t, TagFactory(t))

从这段代码上可以知道,每当我们通过对应名称创建一个标签时,会在tags里面里面寻找到对应的标签,然后调用工厂方法生成一个对应的标签,这个工厂方法生成的其实是一个Tag对象,并且所有HTML标签都是这个Tag类,因此可以猜测如果要添加新的标签对象,那么可以通过修改tags里面的值,我们加入对应的标签值之后发现代码可以运行了,至此问题都解决了。

其实这些错误都是Python2代码移植到python3环境下常见的错误,至于它的源码我没怎么看太明白,主要是它生成标签的这一块,我也不知道为什么修改了tags之后就可以运行了,python类厂的概念我还是不太明白,看来要花时间好好补一下基础内容了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python 生成html_Python使用pyh生成HTML文档的方法示例相关推荐

  1. python 生成html文档,Python使用pyh生成HTML文档的方法示例

    Python使用pyh生成HTML文档的方法示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python使用pyh生成HTML文档的方法示例.txt ] (友 ...

  2. c语言如何自动生成word,C语言读取word文档的方法

    C语言读取word文档的方法 第一种方法: 复制代码 代码如下: Response.ClearContent(); Response.ClearHeaders(); Response.ContentT ...

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

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

  4. python根据模板生成pdf文件_程序生成word与PDF文档的方法(python)

    程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...

  5. python生成word 带目录_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  6. php导出doc文件_PHP生成Word文档的方法

    PHP生成Word文档的方法 首先,请确保在你的Windows系统中已经安装并配置好了一个典型的WAMP环境.由于Interop纯粹是一个Windows的特性,我们将在Windows平台下搭建Apac ...

  7. 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档

    注:NDoc是一个Open Source的For .Net 文档自动生成软件.它可以通过 .Net中XML的注释标签来生成非常漂亮的MSDN风格的类库文档.(相对于VS.Net自己带的Comment ...

  8. 亿愿Word文档批量多语言翻译---word文档翻译专家!几十种语言随意快速互译!可以生成中外文,中英文对照内容文档!

    亿愿Word文档批量多语言翻译-软件功能简介 [亿愿Word文档批量多语言翻译]采用目前最强大的.国际著名公司的谷歌翻译引擎,自动识别语言种类,把英文.日文.韩文.德文.法文.俄文等几十种外国语言的文 ...

  9. java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区

    生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...

最新文章

  1. Postfix+Amavisd-new+Spamassassin+ClamAV整合安装
  2. Golang的基本类型、引用类型、复合类型
  3. Zuul 2 –样本过滤器
  4. 坐标轨迹计算_机器人的轨迹规划与自动导引
  5. 【Kafka】A broker is already registered on the path /brokers/ids/0. This probably indicates that you
  6. JVM 运行机制及基本原理
  7. 从“朕已阅”到“翻牌子”,程序员的仪式感可以有多重?
  8. Linux之find exec
  9. java 文件缓冲区_基于直接缓冲区和非直接缓冲区的javaIO文件操作
  10. 意识的哲学、生理及智能属性研究
  11. 索尼和微软同时发布新游戏机——抢钱了
  12. 通往架构师之路系列之Java设计模式(二)工厂方法模式
  13. 51单片机控制TB6600驱动器驱动42步进电机
  14. 基于javaweb+mysql的高校学生会社团管理系统(前台、后台)
  15. matlab 射频滤波器,第12章射频(MATLAB仿真在现代通信中的应用).ppt
  16. D3js-绘制SVG
  17. 杭电。刘春英。老师 写给计算机软件专业的大学生
  18. Blender图解教程:多边形建模命令 之 环切 (Loop Cut)
  19. K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示
  20. 板式家具包装三步法_板式家具打包新方法,终于知道怎么打包了

热门文章

  1. 阿里云MVP乔帮主:五大类型负载均衡的原理场景详解(文末赠书)
  2. JRebel for idea 有时候不生效
  3. Struts 1 和 Struts 2 的线程安全
  4. Programming Computer Vision with Python【学习笔记】【第一章】
  5. TCP/IP入门(3) --传输层
  6. Django,再谈json序列化
  7. ANOI 2009 【同类分布】
  8. 5分钟掌握var,let和const异同
  9. Vue.use自定义自己的全局组件
  10. 分享:一款前端布局工具(alloydesigner)