用状态机STATE MACHINE实现有选择的文件转换
生活随笔
收集整理的這篇文章主要介紹了
用状态机STATE MACHINE实现有选择的文件转换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用書上的例子實現(xiàn)在解析HTML文本時,對"<>"中的符號不進(jìn)行字符轉(zhuǎn)換。
import sys import string from optparse import OptionParserCHAR_MAP = dict(zip(string.ascii_lowercase,string.ascii_lowercase[13:26] + string.ascii_lowercase[0:13]) )class RotateStream(object):"""General purpost ROT13 TranslatorA ROT13 translator smart enough to skipMarkup tags if that's what we want."""MARKUP_START = '<'MARKUP_END = '>'def __init__(self, skip_tags):self.skip_tags = skip_tagsdef rotate13_letter(self, letter):"""Return the 13-char rotation of a letter."""do_upper = Falseif letter.isupper():do_upper = Trueletter = letter.lower()if letter not in CHAR_MAP:return letterelse:letter = CHAR_MAP[letter]if do_upper:letter = letter.upper()return letterdef rotate_from_file(self,handle):"""Rotate from a file handle.Take a file-like object and translatestext file it into ROT13"""state_markup = Falsefor line in handle:for char in line:if self.skip_tags:if state_markup:#here we're looking for a closing '>'if char == self.MARKUP_END:state_markup = False#char = charelse:#Not in a markup state, rotate#unless we're starting a new tagif char == self.MARKUP_START:state_markup = Trueelse:char = self.rotate13_letter(char)else:char = self.rotate13_letter(char)#Make this a generatoryield charif __name__ == '__main__':parser = OptionParser()parser.add_option('-t', '--tags', dest = "tags",help = "Ignore Markup Tags", default = False,action = "store_true")options, args = parser.parse_args()print("options tags is ", options.tags)rot = RotateStream(options.tags)for letter in rot.rotate_from_file(sys.stdin):sys.stdout.write(letter) 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的用状态机STATE MACHINE实现有选择的文件转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修复VC6.0打开菜单项以及添加工程菜单
- 下一篇: Linux C 数据结构---线性表