Python之打印html 表格

        現要實現打印html格式的表格代碼,利用Python對字符串str.format()格式化操作進行處理,在日常對CVS格式文件處理過程當中,經常會將CVS格式文件進行轉換,在正式場合是程序讀取CVS文件進行轉換並輸出到html格式的文件當中,但現在只是實現一下轉換的過程,需要輸入以逗號分隔的數據。

        在設計程式的時候,需要先定義一下整個代碼的框架,首先我們要定義一個主函數main(),雖然Python沒有規定入口函數,一般在正式的開發中都設計了一個main()函數作爲程序的入口函數,或許這是一種規範吧。然後我們在定義一個打印表頭的方法print_head(),並在主函數裏進行調用。再定義一個打印表尾的方法print_end(),也在主函數中進行調用。定義print_line()爲打印表格行,定義extract_field()處理cvs行數據轉換爲list集合數據。最後再定義一個處理特殊符號的方法escape_html(),因爲在html代碼中爲了避免與它的標籤衝突,特要進行特殊符號的轉換,如&-->& 還有就是對長度過長的數據要進行處理並用...代替

源代碼:

#Author Tandaly
#Date 2013-04-09
#File Csv2html.py

#主函數
def main():
	print_head()
	maxWidth = 100
	count = 0
	while True:
		try:
			line = str(input())
			if count == 0:
				color = "lightgreen"
			elif count%2 == 0:
				color = "white"
			else:
				color = "lightyellow"
			print_line(line, color, maxWidth)
			count += 1
		except EOFError:
			break
	print_end()

#打印表格頭
def print_head():
	print("<table border=\"1\">")

#打印表行
def print_line(line, color, maxWidth):
	tr = "<tr bgcolor=\"{0}\">".format(color)
	tds = ""
	if line is not None and len(line) > 0:
		fields = axtract_fields(line)
		for filed in fields:
			td = "<td align=\"right\">{0}</td>".format(filed if (len(str(filed)) <= maxWidth) else (str(filed)[:100] + "..."))	
			tds += td

		tr += "{0}</tr>".format(tds)
		print(tr)
	
#打印表格尾
def print_end():
	print("</table>")

#抽取行值
def axtract_fields(line):
	line = escape_html(line)
	fields = []
	field = ""
	quote = None
	for c in line:
		if c in "\"":
			if quote is None:
				quote = c
			elif quote == c:
				quote = None
			continue
		if quote is not None:
			field += c
			continue
		if c in ",":
			fields.append(field)
			field = ""
		else:
			field += c
	if len(field) > 0:
		fields.append(field)
	return fields

#處理特殊符號
def escape_html(text):
	text = text.replace("&", "&")
	text = text.replace(">", ">")
	text = text.replace("<", "<")
	return text

#程序入口
if __name__ == "__main__":
	main()

運行結果:

>>> 
<table border="1">
"nihao","wo"
<tr bgcolor="lightgreen"><td align="right">nihao</td><td align="right">wo</td></tr>
"lsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsfdddddddddddddddddddddddssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosdjfsldkfjsladjfsladjflasjdfljslkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkksssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss","tandaly"
<tr bgcolor="lightyellow"><td align="right">lsdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd...</td><td align="right">tandaly</td></tr>
"ddddddddddddddddsllsflsdjflsdjfljasfjslfjleiwiwooooooooooosdlsdfkckslslllllwllllllllllllllllllllllllllllllllllllllllllllllllllllllgfdjslfjsdlkkkkkkkkkkksdfssssssssssssss", 34
<tr bgcolor="white"><td align="right">ddddddddddddddddsllsflsdjflsdjfljasfjslfjleiwiwooooooooooosdlsdfkckslslllllwllllllllllllllllllllllll...</td><td align="right"> 34</td></tr>
</table>











作者:Tandaly

地址:http://blog.csdn.net/tandaly/article/details/8781131

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章