Python: template system

a sample template system which recognize {@xxx} pattern and take appropriate actionspython

it is similar to the mechanism bitbake deploys to deal with .bb filesexpress

toolsapp

regular expression (match and substitute)ide

dictionary and scopethis

eval and execlua

 

codespa

#!/usr/bin/env python                                                                                                                                                                                           

# a template system: recognize {@XXX} pattern and execute it or evaluate it                                                                                                                                     

import re
import fileinput

# Matches fields enclosed in braces                                                                                                                                                                             
pattern = re.compile(r'{@(.+?)}')

# Collect variables in this                                                                                                                                                                                     
scope = {}

# This is used in re.sub, match is a match object                                                                                                                                                               
def replacement(match):
    code = match.group(1)
    try:
        # if the field can be evaluated, return it                                                                                                                                                              
	return str(eval(code, scope))
    except SyntaxError:
	# otherwise excuete the statement in the same scope                                                                                                                                                     
	exec code in scope
	return ''

def main():
    lines = []
    for line in fileinput.input():
	lines.append(line)
    text = ''.join(lines)
    #substitue all the occurrences of the field pattern                                                                                                                                                         
    print pattern.sub(replacement, text)

if __name__ == '__main__':
    main()

input.net

{@name = 'James.C'}
{@email = 'james.c.2012.c.james@gmail.com'}
{@language = 'python'}
code

{@import time}
Dear {@name},
I would like to learn how to program. I hear you use the {@language} language a lot -- is it something I should consider?

And by the way, is {@email} your correct email address?

Qi, {@time.asctime()}


get

output

chenqi@chenqi-OptiPlex-760:~/mypro/python$ ./templates.py def.txt mail.txt Dear James.C, I would like to learn how to program. I hear you use the python language a lot -- is it something I should consider? And by the way, is james.c.2012.c.james@gmail.com your correct email address? Qi, Fri Aug 24 12:37:34 2012 chenqi@chenqi-OptiPlex-760:~/mypro/python$

相關文章
相關標籤/搜索