最近在项目中需要将结果导出到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()

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

  1. python把坐标写入文本_Python实现将数据写入netCDF4中的方法示例

    本文实例讲述了Python实现将数据写入netCDF4中的方法.分享给大家供大家参考,具体如下: nc文件为处理气象数据文件.用户可以去https://www.lfd.uci.edu/~gohlke/ ...

  2. python增加一列数据_Python编程给numpy矩阵添加一列方法示例

    首先我们有一个数据是一个mn的numpy矩阵现在我们希望能够进行给他加上一列变成一个m(n+1)的矩阵 import numpy as np a = np.array([[1,2,3],[4,5,6] ...

  3. python创建一个有序链表_Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...

  4. python万年历差农历程序_Python实现公历(阳历)转农历(阴历)的方法示例

    本文实例讲述了Python实现公历(阳历)转农历(阴历)的方法.分享给大家供大家参考,具体如下: 两个要点: 1.公历转农历用了查表法(第126行) 2.节气用了天文法?(第176行) 运行图(背景是 ...

  5. python产生5个随机数_Python和numpy生成随机数

    http://blog.csdn.net/pipisorry/article/details/39086463 随机数种子 要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成 ...

  6. python判断回文数_python如何判断是不是回文数

    什么是回文数: 有这样一类数,他们顺着看和倒着看是相同的数,例如:12321,1221,2332等,这样的数字就称为:回文数. 例子:输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万 ...

  7. python输入一个五位数、判断是否为回文数_python如何判断是不是回文数

    什么是回文数: 有这样一类数,他们顺着看和倒着看是相同的数,例如:12321,1221,2332等,这样的数字就称为:回文数. 例子:输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万 ...

  8. python怎么读取pdf文件_Python解析并读取PDF文件内容的方法

    本文实例讲述了Python解析并读取PDF文件内容的方法.分享给大家供大家参考,具体如下: 一.问题描述 利用python,去读取pdf文本内容. 二.效果 三.运行环境 python2.7 四.需要 ...

  9. python 图片相似度算法比较_python 比较2张图片的相似度的方法示例

    本文介绍了python 比较2张图片的相似度的方法示例,分享给大家,具体如下: #!/usr/bin/python # -*- coding: UTF-8 -*- import cv2 import ...

最新文章

  1. OS中关于父子进程的执行顺序和多个子进程之间的执行顺序(整理)
  2. 北斗导航 | 基于MATLAB的卫星轨道模拟
  3. asp中chr()函数及转义符对照表
  4. linux:gpg加密和解密
  5. php的延时sleep函数
  6. 大数据(big data)_如何使用Big Query&Data Studio处理和可视化Google Cloud上的财务数据...
  7. Linux 下开机自动重启脚本
  8. php mysql密码验证_php 连接数据库 验证用户名密码
  9. (37)FPGA三种基本逻辑门(非门)
  10. 知识分享:如何用插件实现操作校验
  11. UVA 10564 - Paths through the Hourglass (dp)
  12. 产品小姐姐收到这个黑科技后,开心了一整天...
  13. JavaScript 小知识
  14. APP抓包加密破解(hook)
  15. 问卷与量表数据分析(SPSS+AMOS)学习笔记(六) : SPSS 描述性统计分析
  16. [feather]StarlingUi框架——feather抱怨
  17. 第一次使用scrapy爬豆瓣top250 报错 AttributeError Requset has no attribute dont_filter 和 meta
  18. 解决微星主板点击睡眠后电脑死机
  19. 天气学诊断实习四 计算垂直速度
  20. 开源项目:BottomBar

热门文章

  1. FreeCAD Draft ShapeString tutorial
  2. php周公解梦源码,周公解梦MySQL SQL文件 周公解梦大全数据库
  3. 5000元性价比高的笔记本_5000元左右笔记本电脑推荐 5000元左右性价比高的笔记本排行...
  4. Python中删除set中指定元素元素不存在时不报错:s.discard()元素不存在时报错:s.remove()
  5. python程序流程控制练习题
  6. 程序员,你是选择25k的996 还是18k的八小时?
  7. mysql 二进制 最大长度_mysql 二进制日志后缀数字最大为多少
  8. DELL R730 + 双路1080ti 安装Ubuntu-Server 16.04.4 LTS amd64
  9. 【js排序算法】--基础排序算法
  10. vue-router 导航守卫