最近使用python做个小东西,需要生成html,但是pyh0.1是针对python2.7的,在python3上不好用。

不过呢,2.7和3.0的区别并不大,把pyh0.1的代码稍微修改后就可以在3.0上使用了。

下面是修改后的源代码:

# @file: pyh.py
# @purpose: a HTML tag generator
# @author: Emmanuel Turlay <turlay@cern.ch>__doc__ = """The pyh.py module is the core of the PyH package. PyH lets you
generate HTML tags from within your python code.
See http://code.google.com/p/pyh/ for documentation.
"""
__author__ = "Emmanuel Turlay <turlay@cern.ch>"
__version__ = '$Revision: 43 $'
__date__ = '$Date$'from sys import _getframe, stdout, modules, version
nOpen={}nl = '\n'
doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n'
charset = '<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\n'tags = ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend', 'input', 'select', 'span', 'b', 'i', 'option', 'img', 'script','table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table']selfClose = ['input', 'img', 'link', 'br']class Tag(list):tagname = ''def __init__(self, *arg, **kw):self.attributes = kwif self.tagname : name = self.tagnameself.isSeq = Falseelse: name = 'sequence'self.isSeq = Trueself.id = kw.get('id', name)#self.extend(arg)for a in arg: self.addObj(a)def __iadd__(self, obj):if isinstance(obj, Tag) and obj.isSeq:for o in obj: self.addObj(o)else: self.addObj(obj)return selfdef addObj(self, obj):if not isinstance(obj, Tag): obj = str(obj)id=self.setID(obj)setattr(self, id, obj)self.append(obj)def setID(self, obj):if isinstance(obj, Tag):id = obj.idn = len([t for t in self if isinstance(t, Tag) and t.id.startswith(id)])else:id = 'content'n = len([t for t in self if not isinstance(t, Tag)])if n: id = '%s_%03i' % (id, n)if isinstance(obj, Tag): obj.id = idreturn iddef __add__(self, obj):if self.tagname: return Tag(self, obj)self.addObj(obj)return selfdef __lshift__(self, obj):self += objreturn objdef render(self):result = ''if self.tagname:result = '<%s%s%s>' % (self.tagname, self.renderAtt(), self.selfClose()*' /')if not self.selfClose():for c in self:if isinstance(c, Tag):result += c.render()else: result += cif self.tagname: result += '</%s>' % self.tagnameresult += '\n'return resultdef renderAtt(self):result = ''for n, v in self.attributes.items():if n != 'txt' and n != 'open':if n == 'cl': n = 'class'result += ' %s="%s"' % (n, v)return resultdef selfClose(self):return self.tagname in selfClose        def TagFactory(name):class f(Tag):tagname = namef.__name__ = namereturn fthisModule = modules[__name__]for t in tags: setattr(thisModule, t, TagFactory(t)) def ValidW3C():out = a(img(src='http://www.w3.org/Icons/valid-xhtml10', alt='Valid XHTML 1.0 Strict'), href='http://validator.w3.org/check?uri=referer')return outclass PyH(Tag):tagname = 'html'def __init__(self, name='MyPyHPage'):self += head()self += body()self.attributes = dict(xmlns='http://www.w3.org/1999/xhtml', lang='en')self.head += title(name)def __iadd__(self, obj):if isinstance(obj, head) or isinstance(obj, body): self.addObj(obj)elif isinstance(obj, meta) or isinstance(obj, link): self.head += objelse:self.body += objid=self.setID(obj)setattr(self, id, obj)return selfdef addJS(self, *arg):for f in arg: self.head += script(type='text/javascript', src=f)def addCSS(self, *arg):for f in arg: self.head += link(rel='stylesheet', type='text/css', href=f)def printOut(self,file=''):if file: f = open(file, 'w')else: f = stdoutf.write(doctype)f.write(self.render())f.flush()if file: f.close()class TagCounter:_count = {}_lastOpen = []for t in tags: _count[t] = 0def __init__(self, name):self._name = namedef open(self, tag):if isLegal(tag): self._count[tag] += 1self._lastOpen += [tag]def close(self, tag):if isLegal(tag) and self._lastOpen[-1] == tag: self._count[tag] -= 1self._lastOpen.pop()else:print('Cross tagging is wrong')def isAllowed(self, tag, open):if not open and self.isClosed(tag):print('TRYING TO CLOSE NON-OPEN TAG: %s' % tag)return Falsereturn Truedef isOpen(self, tag):if isLegal(tag): return self._count[tag]def isClosed(self, tag):if isLegal(tag): return not self._count[tag]def isLegal(tag):if tag in tags: return Trueelse:print('ILLEGAL TAG: %s' % tag)return False

转载于:https://www.cnblogs.com/yunmenzhe/p/6293428.html

可以在python3下面用的pyh相关推荐

  1. 1Python生成高质量Html文件:Pyh模块+Bootstrap框架

    一,介绍 QQ交流群:585499566 本文的目的是怎么使用Pyh+Bootstrap快速生成简约,大方,清新的Html页面,涉及到的技能:Python小白技能,Pyh会阅读中文文档,Html基础, ...

  2. python3 pyh模块的安装

    为了用python生成html样式的文件.需要安装pyh模块. python3 对应的pycharm 里边不能直接安装pyh模块 .需要下载pyh 的源码(文末附上pyh模块的源码),然后在安装pyt ...

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

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

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

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

  5. 使用pyh生成HTML文档

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

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

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

  7. pip 无法卸载 pillow 解决方案 Not uninstalling pillow at /usr/lib/python3/dist-packages

    1. 问题现象 使用 pip 卸载 pillow 时无法卸载,报如下错误: $ sudo pip3 uninstall pillow Not uninstalling pillow at /usr/l ...

  8. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  9. Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建

    Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...

  10. python2转python3文件

    python37 -m 2to3.py -w C:\Users\Administrator\Desktop\搜狗细胞词库处理.py 命令 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

最新文章

  1. 独家 | 为你的数据科学项目提供有力支撑——3个寻找数据集的最佳网站
  2. 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条
  3. 过年期间:这个 GitHub 项目你必能用到
  4. Python之配置日志模块logging
  5. springmvc二: @RequestMapping
  6. 9.2 协同过滤-机器学习笔记-斯坦福吴恩达教授
  7. oracle张大鹏,Oracle数据库性能优化
  8. 如何用二进制表示一个小数
  9. 03-drawcommands工程分析详解
  10. 写出python字符串三种常用的函数或方法_python中几种常用字符串函数
  11. JS:ES6-4 简化对象与箭头函数
  12. 研究多个基因间相互作用的频域方法
  13. Julia:和Julia相关的经济学网站 和初学者网站
  14. RT_thread 使用4G模块Air720H对STM32进行OTA远程无线升级
  15. Windows 7 - TeamViewer 13 安装
  16. permissionerror winerror 5 拒绝访问。
  17. iOS设置基于ikev2的协议连接企业虚拟专用网络
  18. Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
  19. linux php护卫神,评测:护卫神·主机大师 (Linux版)
  20. Matplotlib数据可视化高级

热门文章

  1. 从程序员到CTO,他只做了三件事!!!
  2. 鹅厂员工平均月薪7万刷屏!公司每天赚9.5亿,养5.46万人
  3. 短视频追剧的末日来了?
  4. 你知道谷歌有个社区叫 GBG 么?
  5. Linux进阶之Linux中的标准输入输出
  6. 【转】C#中的Stream
  7. 装饰者模式(C#)实现
  8. 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)
  9. Protobuf学习 - 入门(转)
  10. 中国智能硬件创新产业发展分析2017