Python基础教程——把文本转为HTML格式

来源:互联网 发布:淘宝polo衫 编辑:程序博客网 时间:2024/06/05 08:39

功能:将文本文件转换成html格式的文档。
方法:
1.添加初始标签
2.智能分段

#util.pydef lines(file):#遍历文本文件,用生成器保存每行    for line in file:yield line  #此时获取到第一行的值后,会暂停,返回到被调用的地方,即blocks函数语句中#在文件最后添加空行    yield '\n' def blocks(file):    block=[]#lines函数返回的yield存储值,拿来每行遍历,根据是否有空行找出段落    for line in lines(file):#判断是否为字符串,字符串才有split()方法,如果有,追加到block里,开始回到lines中进入到下一次循环,        if line.strip():            block.append(line)#如果不是字符串,那么将block里的内容去空格并追加到空字符串''后,然后清空block,避免重复内容        elif block:            yield ''.join(block).strip()            block=[]

#simple_markup.pyimport sys,refrom util import * print '...'title=True for block in blocks(sys.stdin):block=re.sub(r'\*(.+?)\*',r'<em>\1</em>',block)    if title:        print '<h1>'        print block        print '</h1>'        title=False    else:        print '<p>'        print block        print '</p>'print ''

数据流是这样的:
python simple_markup.py f1output.html
回车运行,首先打印初始标签,然后进入for循环,调用到util.py里面的blocks函数,blocks函数中的循环调用到lines函数,生成一个新的文本文件(其实就是最后面加了一个空行),然而在用到yield生成器的过程中非常有意思:

首先在lines里面遍历原始文件的每行,每遍历一行后,会暂停并将值返回给blocks函数,blocks收到后进入if判断,是字符串,则追加到空列表中。否则将其字符串化”.join(block).strip()

第一次循环之后,程序回到lines函数暂停的地方,就是util.py第4行,继续遍历原始文件,从第二行开始。当遇到空行,返回值将是空,那就会进入到elif判断中,将blocks列表里的内容字符串化,并回到simple_markup.py中去。

进入simple_markup.py的循环中之后,如果原始文件还没读完,会再回去进行下一次循环,直到全部完成,最后一次循环是:yield \n添加空行返回给blocks,由于为空,进入elif,将内容结算后,清空再次循环,再次进入到elif 判定为false不再继续,程序结束。

涉及的知识点:
1.sys.stdin
2.生成器yield
3.正则表达式的过滤

sys.stdin 标准输入,手册里没多讲,在使用使用时作为参数运行,python simple_markup.pyfilename2,读filename1的内容写入,输出到filename2中

生成器参考这篇,写的太好了!

正则表达式,这里用到的re.sub(r’”(.*?)”‘,r’\1‘,block)

代表将block的内容里面“”之内的内容转换为加上标签的形式。\1(数字1)代表反向引用,稍后详解。

值返回给simple_markup.py中的循环判断,第一行的值作为首行
其余的为段落,最后打印结尾标签。

转载地址:陆

0 0
原创粉丝点击