可以在python3下面用的pyh
最近使用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相关推荐
- 1Python生成高质量Html文件:Pyh模块+Bootstrap框架
一,介绍 QQ交流群:585499566 本文的目的是怎么使用Pyh+Bootstrap快速生成简约,大方,清新的Html页面,涉及到的技能:Python小白技能,Pyh会阅读中文文档,Html基础, ...
- python3 pyh模块的安装
为了用python生成html样式的文件.需要安装pyh模块. python3 对应的pycharm 里边不能直接安装pyh模块 .需要下载pyh 的源码(文末附上pyh模块的源码),然后在安装pyt ...
- python 生成html_Python使用pyh生成HTML文档的方法示例
最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网 ...
- python 生成html文档_Python使用pyh生成HTML文档的方法示例
最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网 ...
- 使用pyh生成HTML文档
最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网 ...
- python 生成html文档,Python使用pyh生成HTML文档的方法示例
Python使用pyh生成HTML文档的方法示例 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: Python使用pyh生成HTML文档的方法示例.txt ] (友 ...
- pip 无法卸载 pillow 解决方案 Not uninstalling pillow at /usr/lib/python3/dist-packages
1. 问题现象 使用 pip 卸载 pillow 时无法卸载,报如下错误: $ sudo pip3 uninstall pillow Not uninstalling pillow at /usr/l ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建
Anaconda3+python3.7.10+TensorFlow2.3.0+PyQt5环境搭建 一.Anaconda 创建 python3.7环境 1.进入 C:\Users\用户名 目录下,找到 ...
- python2转python3文件
python37 -m 2to3.py -w C:\Users\Administrator\Desktop\搜狗细胞词库处理.py 命令 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...
最新文章
- 独家 | 为你的数据科学项目提供有力支撑——3个寻找数据集的最佳网站
- 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条
- 过年期间:这个 GitHub 项目你必能用到
- Python之配置日志模块logging
- springmvc二: @RequestMapping
- 9.2 协同过滤-机器学习笔记-斯坦福吴恩达教授
- oracle张大鹏,Oracle数据库性能优化
- 如何用二进制表示一个小数
- 03-drawcommands工程分析详解
- 写出python字符串三种常用的函数或方法_python中几种常用字符串函数
- JS:ES6-4 简化对象与箭头函数
- 研究多个基因间相互作用的频域方法
- Julia:和Julia相关的经济学网站 和初学者网站
- RT_thread 使用4G模块Air720H对STM32进行OTA远程无线升级
- Windows 7 - TeamViewer 13 安装
- permissionerror winerror 5 拒绝访问。
- iOS设置基于ikev2的协议连接企业虚拟专用网络
- Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
- linux php护卫神,评测:护卫神·主机大师 (Linux版)
- Matplotlib数据可视化高级