0
我需要使用Before和After搜索替換模式寫入文件。我寫了下面的代碼。我已經使用函數寫入輸出文件,它工作正常。但我有大約20個這樣的替換模式,我覺得我不寫一個好的代碼,因爲我需要爲所有這些替換創建函數。你能否讓我知道有沒有其他的方式來實施?使用lambda搜索模式替換
import re
Report_file = open("report.txt", "w")
st = '''<TimeLog>
<InTime='10Azx'>1056789</InTime>
<OutTime='14crg'>1056867</OutTime>
<PsTime='32lxn'>1056935</PsTime>
<ClrTime='09zvf'>1057689</ClrTime>
</TimeLog>'''
def tcnv(str):
Report_file.write("Previous TS: " + str + "\n\n")
v1 = re.search(r"(?i)<clrtime='(\d+\w+)'>", str)
val1 = v1.group(1)
v2 = re.search(r"(?i)(<clrtime='(\d+\w+)'>(.*?)</clrtime>)", str)
val2 = v2.group(3)
soutval = "<Clzone><clnvl='" + val1 + "'>" + val2 + "</clnvl></Clzone>"
Report_file.write("New TS: " + soutval + "\n")
return soutval
st = re.sub(r"(?i)(<clrtime='(\d+\w+)'>(.*?)</clrtime>)", lambda m: tcnv(m.group(1)), st)
st = re.sub(r"(?i)<intime='(\d+\w+)'>(.*?)</intime>", "<Izone><Invl='\\1'>\\2</Invl></Izone>", st)
st = re.sub(r"(?i)<outtime='(\d+\w+)'>(.*?)</outtime>", "<Ozone><onvl='\\1'>\\2</onnvl></Ozone>", st)
st = re.sub(r"(?i)<pstime='(\d+\w+)'>(.*?)</pstime>", "<Pszone><psnvl='\\1'>\\2</psnvl
感謝您的反饋。因爲我是新來的python我打開這種方式的文件。你能解釋一下ripl的功能嗎? – 2013-02-20 14:01:40
我無法創建包含搜索替換模式之前和之後的報告。 – 2013-02-20 14:06:49
@ new2python''ripl()''是一個用來接收參數''ma''上的MatchObjects的函數。它使用字典「d」。我把這個字典作爲參數''d''的默認值。實際上,函數可以用def ripl(ma,dico)來定義:''和參數'dico''將替換函數塊中的''d'':''dico [ma.group(1) ] [0]''和''dico [ma.group(1)] [1]''。定義參數的默認值是很有趣的,因爲函數定義的執行只執行一次(根據定義,您必須理解:描述函數的文本塊) – eyquem 2013-02-20 14:10:00