Python基礎教程 把文字轉為HTML格式

2021-06-26 04:54:53 字數 1894 閱讀 1904

功能:將文字檔案轉換成html格式的文件。

方法:1.新增初始標籤

2.智慧型分段

#util.py

def 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裡的內容去空格並追加到空字串''後,然後清空block,避免重複內容

elif block:

yield ''.join(block).strip()

block=

#******_markup.py

import sys,re

from util import *

print '...'

title=true

for block in blocks(sys.stdin):

block=re.sub(r'\*(.+?)\*',r'\1',block)

if title:

print ''

title=false

else:

print ''

print block

print '

'print ''

資料流是這樣的:

python ******_markup.py f1output.html

回車執行,首先列印初始標籤,然後進入for迴圈,呼叫到util.py裡面的blocks函式,blocks函式中的迴圈呼叫到lines函式,生成乙個新的文字檔案(其實就是最後麵加了乙個空行),然而在用到yield生成器的過程中非常有意思:

首先在lines裡面遍歷原始檔案的每行,每遍歷一行後,會暫停並將值返回給blocks函式,blocks收到後進入if判斷,是字串,則追加到空列表中。否則將其字串化」.join(block).strip()

第一次迴圈之後,程式回到lines函式暫停的地方,就是util.py第4行,繼續遍歷原始檔案,從第二行開始。當遇到空行,返回值將是空,那就會進入到elif判斷中,將blocks列表裡的內容字串化,並回到******_markup.py中去。

進入******_markup.py的迴圈中之後,如果原始檔案還沒讀完,會再回去進行下一次迴圈,直到全部完成,最後一次迴圈是:yield \n新增空行返回給blocks,由於為空,進入elif,將內容結算後,清空再次迴圈,再次進入到elif 判定為false不再繼續,程式結束。

涉及的知識點:

1.sys.stdin

2.生成器yield

3.正規表示式的過濾

sys.stdin 標準輸入,手冊裡沒多講,在使用使用時作為引數執行,python ******_markup.pyfilename2,讀filename1的內容寫入,輸出到filename2中

生成器參考這篇,寫的太好了!

正規表示式,這裡用到的re.sub(r』」(.*?)」『,r』\1『,block)

代表將block的內容裡面「」之內的內容轉換為加上標籤的形式。\1(數字1)代表反向引用,稍後詳解。

值返回給******_markup.py中的迴圈判斷,第一行的值作為首行

其餘的為段落,最後列印結尾標籤。

python基礎教程

乙個簡單的客戶機 import socket s socket.socket host socket.gethostname port 1234 s.bind host,port s.listen 5 while true c,addr s.accept print got connection f...

Python基礎教程

本教程不包括python的安裝,ide採用spyder pytho2.7 1.print pow 2,3 8 print 2 3 8這裡pow函式表示乘方,與 功能相同。2.abs 10 10abs函式用來求乙個數的絕對值。3.round 0.6 1.0 round 0.4 0.0round函式將浮...

Python 基礎教程

python由guido van rossum於1989年底發明,第乙個公開發行版發行於1991年。像perl語言一樣,python 源 同樣遵循 gpl gnu general public license 協議。本教程主要針對python 2.x版本的學習,如果你使用的是python 3.x版本...