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 id = 'div1' class = 'cls_div'>测试div</div>

将元素加入某个元素中可以使用<<符号,该符号返回的是最后被包含的符号对象。比如这样

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

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

<div id = 'div1'>
  <p class = 'p_tag'>测试</p>
</div>

当生成了合适的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利用pyHook实现监听用户鼠标与键盘事件
  • Python中使用PyHook监听鼠标和键盘事件实例
  • python中使用pyhook实现键盘监控的例子
  • python使用pyhook监控键盘并实现切换歌曲的功能
(0)

相关推荐

  • python使用pyhook监控键盘并实现切换歌曲的功能

    自己在玩dota的时候有时候喜欢边玩游戏边听音乐,但是切换下一曲的时候必须得切出游戏,而切换音乐的热键ctrl+alt+方向键在游戏的时候没有用,好事蛋疼,今天试试使用python来实现键盘监控切换下一曲,下面贴出代码 import pythoncom, pyHook import win32gui,win32api,win32con Lcontrol_press = False Lmenu_press = False Left_press = False def OnKeyboardEvent

  • Python利用pyHook实现监听用户鼠标与键盘事件

    本文以一段简单的监听鼠标.键盘事件的程序,实现获取用户的输入(比如登录某些网站的账号.密码)的功能.经测试,对于一台"裸奔"的电脑,完全能获取到用户输入的任何信息:但是如果安装了杀毒软件,就够呛了.具体实现方法如下: 一.代码部分:获取用户输入信息,并与截图一起保存到XX目录下 # -*- coding: utf-8 -*- # import pythoncom import pyHook import time import socket from PIL import ImageG

  • python中使用pyhook实现键盘监控的例子

    pyhook下载:http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/ pyhookAPI手册:http://pyhook.sourceforge.net/doc_1.5.0/ 以上网站上提供了几个使用的例子,另外安装pyhooks后,也会有一个例子的文件.于是拿来学习了一下,第一次运行时,提示没有pythoncom模块,就安装了pywin32,安装后,可以正常运行,但是会导致机器发卡,特别是中断程序运行后,鼠标会出现一段时间的自由

  • Python中使用PyHook监听鼠标和键盘事件实例

    PyHook是一个基于Python的"钩子"库,主要用于监听当前电脑上鼠标和键盘的事件.这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台. 关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用 # -*- coding: utf-8 -*- # 3import pythoncom 4import pyHook 5def onMouseEvent(e

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

    最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网上很多地方都没有提到,因此我在这将它的使用以及我遇到的问题和解决方案整理出来供大家参考 本文主要参考 pyh中文文档 下载的样本也是该文中提到的地址 常规使用 在使用时一般先导入模块: from phy import * 然后可以创建一个PyH对象就像这样 page = PyH(title) 其中t

  • C#编程简单实现生成PDF文档的方法示例

    本文实例讲述了C#编程简单实现生成PDF文档的方法.分享给大家供大家参考,具体如下: using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { public class PDFGenerator { static float pageWidth = 594.0f; static float pageDepth = 828.0f; static float

  • Python简单读写Xls格式文档的方法示例

    本文实例讲述了Python简单读写Xls格式文档的方法.分享给大家供大家参考,具体如下: 1. 模块安装 使用pip install命令安装, 即: pip install xlrd pip install xlwt 如下图: 2. python 代码 import xlrd import xlwt import datetime def set_style(name,height,format,bold=False): style = xlwt.XFStyle() if format.stri

  • SpringBoot集成Swagger2生成接口文档的方法示例

    我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等.它还是和API消费方沟通的重要工具.在实际情况中由于接口和文档存放的位置不同,我们很难及时的去维护文档.个人在实际的工作中就遇到过很多接口更新了很久,但是文档却还是老版本的情况,其实在这个时候这份文档就已经失去了它存在的意义.而 Swagger 是目前我见过的最好的API文档生成工具,使用起来也很方便,还可以直接调试我们的API.我们今天就来看下 Swagger2 与 SpringBoot 的结合. 准备工作

  • python实现的生成word文档功能示例

    本文实例讲述了python实现的生成word文档功能.分享给大家供大家参考,具体如下: 每月1次的测试费用报销,需要做一个文档.干脆花点时间写个程序吧. # -*- coding: utf-8 -*- from tools import get_data from docx import Document def new_doc(fee_data,doc_path,fee):#新建一个word文档,写入汇总表的数据 document = Document() p_total = document

  • 利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用freemarker这样的模板引擎这样的方式.php中也有一些相应的方法,但在python中将web/html内容生成world文档的方法是很少的.其中最不好解决的就是如何将使用js代码异步获取填充的数据,图片导出到word文档中. 1. unoconv 功能: 1.支持将本地html文档转换为docx

  • Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法

    分享给大家供大家参考,具体如下:Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法.分享给大家供大家参考,具体如下: 首先我们创建一个python文件, tieba.py,我们要完成的是,输入指定百度贴吧名字与指定页面范围之后爬取页面html代码,我们首先观察贴吧url的规律,比如: 百度贴吧LOL吧第一页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0 第二页: http://tieba.baidu.com/f?kw=lol

  • Golang生成Excel文档的方法步骤

    基于数据生成 Excel 文档是一个很常见的需求,本文将介绍如何使用 Go 的 Excelize库去生成 Excel 文档,以及一些具体场景下的代码实现. 关于 Excelize 库 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档.支持 XLSX / XLSM / XLTM / XLTX 等多种文档

  • Python实现自动化处理Word文档的方法详解

    目录 1. 批量生成Word文档 2. 将Word文档批量转换成PDF 3. 在Word文档中批量标记关键词 4. 在Word文档中批量替换关键词 使用Python实现Word文档的自动化处理,包括批量生成Word文档.在Word文档中批量进行查找和替换.将Word文档批量转换成PDF等. 1. 批量生成Word文档 安装openpyxl模块 pip install openpyxl 安装python-docx模块 pip install python-docx openpyxl模块可以读写扩展

  • eclipse中自动生成javadoc文档的方法

    本文实例讲述了eclipse中自动生成javadoc文档的方法.分享给大家供大家参考.具体方法如下: 使用eclipse生成文档(javadoc)主要有三种方法: 1. 在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的javadoc,提交到下一步. 在Javadoc Generation对话框中有两个地方要注意的: javadoc command:应该选择jdk的bin/javadoc.exe destination:为生成文档的保存路径,可自由选

随机推荐